Calculate total seconds from string in format “HH:mm:ss,fff”

我是研究僧i 提交于 2019-12-24 02:39:09

问题


In PowerShell V2, I want to calculate the total seconds and milliseconds of a given string.
My string is 00:03:56,908 and the desired output would be 236.908

My working, but awkward code is

$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

Is there a smarter / shorter way to achieve this?


All I found was .totalseconds from a TimeSpan object. But this code was even longer in my attempt


回答1:


The problem with the TimeSpan class in .NET versions earlier than 4.0 is that it's not handling different cultures or formatting strings very well. Given that your string has a comma instead of a period, we'll have to change that if we want to parse it to a timespan, but I think that's still the best way to go at it.

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



回答2:


I wouldn't shy away from TotalSeconds, it can be useful in this circumstance... and reasonably short, if you just extract that property:

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

Putting New-TimeSpan in parenthesis allows us to evaluate that statement first, and then to extract TotalSeconds afterwards. Using (Get-Date).Date is important because it defines midnight, and since you converted $a to a DateTime where the date is today, we need to use midnight today as our Start time.



来源:https://stackoverflow.com/questions/21894169/calculate-total-seconds-from-string-in-format-hhmmss-fff

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!