Как правило, из строки представления [datetime]
(System.DateTime
) нельзя сделать вывод, точно ли они равны .
- Точная точка времени, хранящаяся в экземпляре
[datetime]
, обычно не полностью , отраженная в строковых представлениях.
Два [datetime]
экземпляра считаются равными, только если их значения свойства .Ticks
равны.
- Свойство
.Ticks
содержит [long]
(System.Int64
) значение, которое выражает точку во времени в интервалах 100 наносекунд с полуночи 1 января года 1 нашей эры в григорианском календаре.
Поэтому, если выхотите сравнить [datetime]
экземпляров (только что названных даты в обсуждении ниже) при более высоком уровне детализации , дополнительная работанеобходимо:
Используйте соответствующие Get-Date
параметры для установки всех нижних уровней гранулarity к 0
:
Например, к сравните даты с гранулярностью секунд (чтобы увидеть, попадают ли они в одну и ту же календарную секунду), установите для компонента -MilliSecond
значение 0
:
$dtNow = Get-Date
$dtNowAgain = Get-Date
# This - predictably - returns $false, because the dates aren't exactly equal,
# given that the date values will at least differ by milliseconds, and
# possibly also by the seconds value.
$dtNow -eq $dtNowAgain
# You can abstract away the difference by setting the milliseconds
# component to 0 - this will *typically* return $true
# NOTE: If a new calendar second happened to start between setting $dtNow
# and $dtNowAgain, this will return $false.
(Get-Date $dtNow -MilliSecond 0) -eq (Get-Date $dtNowAgain -MilliSecond 0)
К сравните на уровне минут (чтобы увидеть,они оба попадают в одну и ту же календарную минуту), вы должны установить оба -Second
и -MilliSecond
на 0
:
# This will *typically* return $true.
# NOTE: If a new calendar minute happened to start between setting $dtNow
# and $dtNowAgain, this will return $false.
(Get-Date $dtNow -Second 0 -MilliSecond 0) -eq (Get-Date $dtNowAgain -Second 0 -MilliSecond 0)
Примечание: Преимущество вышеуказанного подхода перед сравнением на основе строк состоит в том, что в конечном итоге он все еще выполняет числовых сравнений , так что не только равенство работает(-eq
), но также неравенство тестирование (-lt
/ -le
/ -gt
/ -ge
), а также сортировка .