我的理解是这应该将秒的时间缩短到3位小数。然而,虽然它不会产生任何错误,但它也不会舍入,产生输出,如 00:02:42.6180000
$elapsedTime = [datetime]$endTime - [datetime]$startTime
$elapsedTime = '{0:HH:mm:s.fff}' -f $elapsedTime
FWIW,起始结束时间只是来自txt文件的字符串,格式为00:47:19.876,这就是我想要进行舍入的原因。源数据仅提供三位小数,因此没有理由输出到七位。
编辑1: 乔伊, 我刚做了一个小测试夹具,看起来像这样
$startTime = '00:47:19.876'
$endTime = '00:49:21.023'
$elapsedTime = [datetime]$endTime - [datetime]$startTime
$elapsedTime = '{0:HH:mm:s.fff}' -f $elapsedTime
$elapsedTime
我的输出是00:02:01.1470000。如果有任何不同,请在Windows 7上运行PS2.0。
编辑2: 刚刚修改为
$elapsedTime = '{0:hh\:mm\:ss\.fff}' -f $elapsedTime
相同的输出,没有错误。
答案 0 :(得分:2)
如果有任何不同,请在Windows 7上运行PS2.0。
在这种情况下,它会产生重大影响。
来自the .NET version 4.0 documentation for TimeSpan.ToString()
(强调补充):
来电者须知
支持格式化TimeSpan值 已添加到.NET Framework版本4 中。但是,ToString()方法重载仍然是文化不敏感的。 [...]
这就是PowerShell忽略所有格式化尝试的原因。
您必须手动连接各个部分:
'{0}:{1:D2}:{2:D2}.{3:D3}' -f (24*$elapsedTime.Days + $elapsedTime.Hours),$elapsedTime.Minutes,$elapsedTime.Seconds,$elapsedTime.Milliseconds