$startTime = get-date
$elapsedTime = $(get-date).AddHours(1) - $startTime
“{0:dd}d:{0:HH}h:{0:mm}m:{0:ss}s” -f ([datetime]$elapsedTime.Ticks)
Why does the result of this give me:
01d:01h:00m:00s
I would expect
0d:01h:00m:00s
$startTime = get-date
$elapsedTime = $(get-date).AddHours(1) - $startTime
“{0:dd}d:{0:HH}h:{0:mm}m:{0:ss}s” -f ([datetime]$elapsedTime.Ticks)
Why does the result of this give me:
01d:01h:00m:00s
I would expect
0d:01h:00m:00s
Powershell Core 7.0.3 does same thing
Is there a specific reason you are not using a TimeSpan?
PS C:\Users\rasim>
$startTime = get-date
$elapsedTime = $(get-date).AddHours(1)
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings
'Standard (c) - {0:c}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (g) - {0:g}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (G) - {0:G}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-timespan-format-strings
“Custom - {0:dd}d:{0:hh}h:{0:mm}m:{0:ss}s” -f (New-TimeSpan -Start $startTime -End $elapsedTime)
Standard (c) - 01:00:00
Standard (g) - 1:00:00
Standard (G) - 0:01:00:00.0000000
Custom - 00d:01h:00m:00s
PS C:\Users\rasim> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.1
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Also v7.03
PS C:\Users\rasim>
$startTime = get-date
$elapsedTime = $(get-date).AddHours(1)
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings
'Standard (c) - {0:c}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (g) - {0:g}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (G) - {0:G}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-timespan-format-strings
“Custom - {0:dd}d:{0:hh}h:{0:mm}m:{0:ss}s” -f (New-TimeSpan -Start $startTime -End $elapsedTime)
Standard (c) - 01:00:00.0013600
Standard (g) - 1:00:00.00136
Standard (G) - 0:01:00:00.0013600
Custom - 00d:01h:00m:00s
PS C:\Users\rasim> $psversiontable
Name Value
---- -----
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.19041
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
[datetime]$elapsedTime.Ticks equates to ‘01 January 0001 01:00:00’, so the day part is 1.
Tried this and got better results
$startTime = get-date
$elapsedTime = New-Timespan -End $(get-date).AddHours(1) -Start $startTime
(“{0}d:” -f ($elapsedTime.Days) + “{0}h:” -f ($elapsedTime.Hours) + “{0}m:” -f ($elapsedTime.Minutes) + “{0}s” -f ($elapsedTime.Seconds))
Not sure what happened, but I posted this solution last night:
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings
'Standard (c) - {0:c}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (g) - {0:g}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
'Standard (G) - {0:G}' -f (New-TimeSpan -Start $startTime -End $elapsedTime)
#https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-timespan-format-strings
“Custom - {0:dd}d:{0:hh}h:{0:mm}m:{0:ss}s” -f (New-TimeSpan -Start $startTime -End $elapsedTime)
Standard (c) - 01:00:00
Standard (g) - 1:00:00
Standard (G) - 0:01:00:00.0000000
Custom - 00d:01h:00m:00s