在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。但是这个代码在我的尝试中更长了
答案 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
转换为日期为今天的日期时间,因此我们需要使用今天的午夜作为我们的开始时间。