从 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 值起作用。为什么我不能使用 $hoursTotalHours 应该是正常的 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