PowerShell中Stopwatch.Elapsed格式化输出DD:HH:MM:SS报错问题
解决PowerShell中Stopwatch Elapsed时间格式化重载错误问题
问题原因
$elapsed是TimeSpan类型,它的ToString()方法支持的自定义格式规则和DateTime不同,你使用的DD:HH:MM:SS是DateTime专属的格式语法,TimeSpan无法识别,因此触发重载错误。
解决方案
以下两种方法可以输出你需要的两位数字天、时、分、秒格式(DD:HH:MM:SS):
方法1:使用TimeSpan原生格式字符串
直接使用TimeSpan支持的格式说明符,用单引号包裹格式字符串避免PowerShell转义问题:
$timer = [System.Diagnostics.Stopwatch]::StartNew() Start-Sleep -Second 83 $timer.Stop() $elapsed = $timer.Elapsed # 两种写法效果一致 Write-Host $elapsed.ToString('dd:HH:mm:ss') # 或者显式转义冒号(双引号场景下可用) Write-Host $elapsed.ToString("dd`:`HH`:`mm`:`ss")
格式说明:
dd:两位数字天数(不足补0)HH:两位数字24小时制小时数mm:两位数字分钟数ss:两位数字秒数
方法2:借助DateTime格式化
将TimeSpan叠加到一个基准日期(如公元1年1月1日)上,再用熟悉的DateTime格式语法输出:
$timer = [System.Diagnostics.Stopwatch]::StartNew() Start-Sleep -Second 83 $timer.Stop() $elapsed = $timer.Elapsed Write-Host (Get-Date "0001-01-01").Add($elapsed).ToString('dd:HH:mm:ss')
内容的提问来源于stack exchange,提问作者NewbieBAT
相关产品推荐
相关产品推荐

