Вы всегда должны различать [datetime] и его локаль / пользовательские настройки в зависимости (строковое) представление.
Вы можете рассчитывать только с типом [datetime]
.Чтобы выделить компонент времени:
> ([datetime]::now).TimeOfDay
Days : 0
Hours : 19
Minutes : 7
Seconds : 8
Milliseconds : 413
Ticks : 688284139558
TotalDays : 0,796625161525463
TotalHours : 19,1190038766111
TotalMinutes : 1147,14023259667
TotalSeconds : 68828,4139558
TotalMilliseconds : 68828413,9558
Или аналогично
> (Get-Date).TimeOfDay
Days : 0
Hours : 19
Minutes : 7
Seconds : 34
Milliseconds : 841
Ticks : 688548416521
TotalDays : 0,796931037640046
TotalHours : 19,1263449033611
TotalMinutes : 1147,58069420167
TotalSeconds : 68854,8416521
TotalMilliseconds : 68854841,6521
Как только формат (Get-Date -f "h:m:s"
или .ToString('T')
) включается, вы получаете строку, которая сначаланеобходимо преобразовать обратно в [datetime]
.
В соответствии с ценной подсказкой @PetSerAls вы можете использовать:
$CheckDateTime = Get-Date
if(($CheckDateTime |
Where-Object TimeOfDay -ge (New-TimeSpan -Hours 8) |
Where-Object TimeOfDay -lt (New-TimeSpan -Hours 17) )){
"{0:M/d/yyyy h:mm tt} is in working hours" -f $CheckDateTime
} else {
"{0:M/d/yyyy h:mm tt} is NOT in working hours" -f $CheckDateTime
}
Чтобы проверить, попадает ли компонент TimeOfDay вопределенные рабочие часы.