以“HH:mm:ss,fff”格式计算字符串的总秒数

时间:2014-02-19 22:39:49

标签: powershell powershell-v2.0 windows-7-x64

在PowerShell V2中,我想计算给定字符串的总秒数和毫秒数 我的字符串为00:03:56,908,所需的输出为236.908

我的工作,但尴尬的代码是

$a = "00:03:56,908"
$a = [datetime]::ParseExact($a,"HH:mm:ss,fff",$null)
[string]($a.Hour*3600 + $a.Minute*60 + $a.Second) +"."+ [string]$a.Millisecond

是否有更聪明/更短的方法来实现这一目标?


我发现的所有内容都来自TimeSpan对象的.totalseconds。但是这个代码在我的尝试中更长了

2 个答案:

答案 0 :(得分:8)

早于4.0的.NET版本中TimeSpan类的问题在于它不能很好地处理不同的文化或格式化字符串。鉴于你的字符串有逗号而不是句号,如果我们想要将它解析到一个时间段,我们就必须改变它,但我认为这仍然是最好的方法。

$timeString = "00:03:56,908"
$timeStringWithPeriod = $timeString.Replace(",",".")
$timespan = [TimeSpan]::Parse($timestringWithPeriod)
$totalSeconds = $timespan.TotalSeconds

答案 1 :(得分:0)

我不会回避TotalSeconds,它可以在这种情况下有用......而且相当短,如果你只是提取那个属性:

PS C:\> $a = "00:03:56,908"
PS C:\> $a = [datetime]::ParseExact($a,"HH:mm:ss,fff",$null)
PS C:\> (New-TimeSpan -Start (Get-Date).Date -End $a).TotalSeconds
236.908

在括号中放置New-TimeSpan允许我们先评估该语句,然后再提取TotalSeconds。使用(Get-Date).Date非常重要,因为它定义了午夜,并且由于您将$a转换为日期为今天的日期时间,因此我们需要使用今天的午夜作为我们的开始时间。