2017-03-04 81 views
0

我的理解是,这应该将时间舍入到小数点后三位。然而,尽管它不会产生任何错误,它也不会轮,产生输出像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

其实,你应该得到与代码的异常。 'HH'不是TimeSpan的有效格式说明符。修复错误(请参阅Mathias的评论)不会显示您为我指出的问题。 – Joey

+0

''{0:hh \:mm \:ss \ .fff}'-f $ elapsedTime' –

+0

@joey,以及它绝对有效... – 4c74356b41

回答

2

在Windows 7上运行PS2.0,如果这有什么区别。

它在这种情况下有很大的区别。

the .NET version 4.0 documentation for TimeSpan.ToString()(强调):

注释呼叫者
支持用于格式化时间跨度值在.NET Framework版本4加入。但是,ToString()方法的重载仍然对文化不敏感。 [...]

这就是PowerShell忽略所有格式化尝试的原因。

你必须手动串联的各个部分:

'{0}:{1:D2}:{2:D2}.{3:D3}' -f (24*$elapsedTime.Days + $elapsedTime.Hours),$elapsedTime.Minutes,$elapsedTime.Seconds,$elapsedTime.Milliseconds