Convert seconds to hh:mm:ss,fff format in PowerShell

nixda picture nixda · Feb 18, 2014 · Viewed 42.9k times · Source

I have a string representing a time in seconds and milliseconds. I want to convert it to a string in the format "hh:mm:ss,fff".

My solution still has the flaw that hours less than 10 are shown with one decimal instead of two:

PS> $secs = "7000.6789"
PS> $ts =  [timespan]::fromseconds($s)
PS> $res = "$($ts.hours):$($ts.minutes):$($ts.seconds),$($ts.milliseconds)"
PS> $res
PS> 1:56:40,679

What is the right way to achieve this? I'm sure there is a more elegant way with -f and datetime.

Answer

andyb picture andyb · Feb 18, 2014

In PowerShell 4.0

$s = "7000.6789"
$ts =  [timespan]::fromseconds($s)
("{0:hh\:mm\:ss\,fff}" -f $ts)

Output: 01:56:40,679


In PowerShell 2.0

$s = "7000.6789"
$ts =  [timespan]::fromseconds($s)
"{0:hh:mm:ss,fff}" -f ([datetime]$ts.Ticks)

Output: 01:56:40,679


And to go back the other way...

$text = "01:56:40,679"
$textReformat = $text -replace ",","."
$seconds = ([TimeSpan]::Parse($textReformat)).TotalSeconds
$seconds

Output: 7000.679