Добавить время из TimeSpan объекта в Powershell - PullRequest
0 голосов
/ 05 февраля 2020

Это сводит меня с ума, и это должно быть что-то простое, что мне не хватает.

Я просто пытаюсь получить общее количество часов от объекта TimeSpan и использовать его, чтобы добавить к DateTime объект.

$mytime = "1/1/2020 10:00:00"
$hours = (New-TimeSpan -Start $mytime).TotalHours
Get-Date
(Get-Date $mytime).AddHours($hours)

Результат:

Среда, 5 февраля 2020 г. 11:25:37

Среда, 5 февраля, 2020 11:25:37

В вышесказанном время не меняется! Однако, если я просто присваиваю значение $hours, оно работает нормально.

$mytime = "1/1/2020 10:00:00"
$hours = 100
Get-Date
(Get-Date $mytime).AddHours($hours)

Среда, 5 февраля 2020 г. 11:25:37

Воскресенье, 5 января , 2020 5:00:01 AM

Я перепробовал все способы назначения переменных и приведения типов, но независимо от того, что я делаю, я не могу заставить работать значение TotalHours. Почему я не могу использовать $hours? TotalHours считается нормальным double, и даже если я приведу его к double ([double]$hours = New-Timespan...), ничего не изменится.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

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)

Я не проверял его, но вам может потребоваться использовать Math.Floor() вместо этого, если у вас потенциально может быть $mytime в будущем.

Правдиво, хотя, если вы хотите сегодня такой же час дня, как и другая дата, более логично сделать это:

$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)
0 голосов
/ 05 февраля 2020

Это работает для меня. Вы добавляете 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 часов, это может быть так просто, как ([временной интервал] подразумевается во втором аргументе):

[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
...