四舍五入

时间:2017-03-04 18:00:26

标签: powershell

我的理解是这应该将秒的时间缩短到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

相同的输出,没有错误。

1 个答案:

答案 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