从 Powershell 中的 TimeSpan 对象添加时间
Add Time from TimeSpan Object in Powershell
这让我抓狂,我想念的一定是简单的东西。
我只是想从 TimeSpan
对象中获取总小时数,然后将其添加到 DateTime
对象中。
$mytime = "1/1/2020 10:00:00"
$hours = (New-TimeSpan -Start $mytime).TotalHours
Get-Date
(Get-Date $mytime).AddHours($hours)
结果是
Wednesday, February 5, 2020 11:25:37 AM
Wednesday, February 5, 2020 11:25:37 AM
以上,时间不变!但是,如果我只是为 $hours
分配一个值,它就可以正常工作。
$mytime = "1/1/2020 10:00:00"
$hours = 100
Get-Date
(Get-Date $mytime).AddHours($hours)
Wednesday, February 5, 2020 11:25:37 AM
Sunday, January 5, 2020 5:00:01 AM
我已经尝试了各种变量赋值和转换方式,但无论我做什么我都无法使 TotalHours
值起作用。为什么我不能使用 $hours
? TotalHours
应该是正常的 double
,即使我将其转换为 double
([double]$hours = New-Timespan...
) 也没有任何变化。
TotalHours
包括小数小时。 $hours
的值类似于 844.1311....
。 TotalHours
的值基本上是:
$ts = New-TimeSpan -Start $mytime
$ts.Ticks / [TimeSpan]::TicksPerHour
如果你想要整数值,试试:
$mytime = "1/1/2020 10:00:00"
$hours = [math]::Truncate((New-TimeSpan -Start $mytime).TotalHours)
(Get-Date $mytime).AddHours($hours)
我还没有测试过,但如果您将来可能拥有 $mytime
,您可能需要使用 Math.Floor()
。
不过,老实说,如果您希望今天的某个时间与另一个日期相同,这样做更合乎逻辑:
$mytime = Get-Date "1/1/2020 10:00:00"
$today = (Get-Date).Date
$today.AddHours($mytime.Hour)
或:
$mytime = Get-Date "1/1/2020 10:00:00"
[DateTime]::Today.AddHours($mytime.Hour)
对我有用。您在第一个示例中添加了 844.4 小时(35 天),即到达当前日期和时间的小时数,在第二个示例中添加了 100 小时(4 天)。
$mytime = "1/1/2020 10:00:00"
$hours = (New-TimeSpan -Start $mytime).TotalHours
$hours
844.404845696333
(Get-Date $mytime).AddHours($hours)
Wednesday, February 5, 2020 2:24:17 PM
$mytime = "1/1/2020 10:00:00"
$hours = 100
(Get-Date $mytime).AddHours($hours)
Sunday, January 5, 2020 2:00:00 PM
这是另一个例子:
[datetime]'2:28pm' + (new-timespan -Hours 1)
Wednesday, February 5, 2020 3:28:00 PM
如果小于 24 小时,它可以像([timespan] 隐含在第二个参数中)一样简单:
[datetime]'2:28pm' + '1:0'
Wednesday, February 5, 2020 3:28:00 PM
减去两个日期时间:
[datetime]"Wednesday, February 5, 2020 11:25:37 AM" - [datetime]"1/1/2020 10:00:00"
Days : 35
Hours : 1
Minutes : 25
Seconds : 37
Milliseconds : 0
Ticks : 30291370000000
TotalDays : 35.0594560185185
TotalHours : 841.426944444444
TotalMinutes : 50485.6166666667
TotalSeconds : 3029137
TotalMilliseconds : 3029137000
这让我抓狂,我想念的一定是简单的东西。
我只是想从 TimeSpan
对象中获取总小时数,然后将其添加到 DateTime
对象中。
$mytime = "1/1/2020 10:00:00"
$hours = (New-TimeSpan -Start $mytime).TotalHours
Get-Date
(Get-Date $mytime).AddHours($hours)
结果是
Wednesday, February 5, 2020 11:25:37 AM
Wednesday, February 5, 2020 11:25:37 AM
以上,时间不变!但是,如果我只是为 $hours
分配一个值,它就可以正常工作。
$mytime = "1/1/2020 10:00:00"
$hours = 100
Get-Date
(Get-Date $mytime).AddHours($hours)
Wednesday, February 5, 2020 11:25:37 AM
Sunday, January 5, 2020 5:00:01 AM
我已经尝试了各种变量赋值和转换方式,但无论我做什么我都无法使 TotalHours
值起作用。为什么我不能使用 $hours
? TotalHours
应该是正常的 double
,即使我将其转换为 double
([double]$hours = New-Timespan...
) 也没有任何变化。
TotalHours
包括小数小时。 $hours
的值类似于 844.1311....
。 TotalHours
的值基本上是:
$ts = New-TimeSpan -Start $mytime
$ts.Ticks / [TimeSpan]::TicksPerHour
如果你想要整数值,试试:
$mytime = "1/1/2020 10:00:00"
$hours = [math]::Truncate((New-TimeSpan -Start $mytime).TotalHours)
(Get-Date $mytime).AddHours($hours)
我还没有测试过,但如果您将来可能拥有 $mytime
,您可能需要使用 Math.Floor()
。
不过,老实说,如果您希望今天的某个时间与另一个日期相同,这样做更合乎逻辑:
$mytime = Get-Date "1/1/2020 10:00:00"
$today = (Get-Date).Date
$today.AddHours($mytime.Hour)
或:
$mytime = Get-Date "1/1/2020 10:00:00"
[DateTime]::Today.AddHours($mytime.Hour)
对我有用。您在第一个示例中添加了 844.4 小时(35 天),即到达当前日期和时间的小时数,在第二个示例中添加了 100 小时(4 天)。
$mytime = "1/1/2020 10:00:00"
$hours = (New-TimeSpan -Start $mytime).TotalHours
$hours
844.404845696333
(Get-Date $mytime).AddHours($hours)
Wednesday, February 5, 2020 2:24:17 PM
$mytime = "1/1/2020 10:00:00"
$hours = 100
(Get-Date $mytime).AddHours($hours)
Sunday, January 5, 2020 2:00:00 PM
这是另一个例子:
[datetime]'2:28pm' + (new-timespan -Hours 1)
Wednesday, February 5, 2020 3:28:00 PM
如果小于 24 小时,它可以像([timespan] 隐含在第二个参数中)一样简单:
[datetime]'2:28pm' + '1:0'
Wednesday, February 5, 2020 3:28:00 PM
减去两个日期时间:
[datetime]"Wednesday, February 5, 2020 11:25:37 AM" - [datetime]"1/1/2020 10:00:00"
Days : 35
Hours : 1
Minutes : 25
Seconds : 37
Milliseconds : 0
Ticks : 30291370000000
TotalDays : 35.0594560185185
TotalHours : 841.426944444444
TotalMinutes : 50485.6166666667
TotalSeconds : 3029137
TotalMilliseconds : 3029137000