Невозможно сравнить даты разных форматов в PowerShell - PullRequest
0 голосов
/ 10 октября 2019

Я должен обновить объекты в наборе данных к дате последнего изменения. (Потенциально) обновленные объекты поступают из вызова API REST, а объекты, которые нужно обновить, из списка SharePoint.

К сожалению, я получаю различные форматы даты / времени для каждого идентичного элемента в PowerShell. Сравните:

Результаты остальных вызовов: 2016-12-15T08:08:39.012+01:00
Список SharePoint: Thursday, December 15, 2016 7:08:39 AM

Я думал об использовании метода [datetime]::ParseExact, но а) Я не знаю, чтовходной формат должен быть и б) если это даже поможет мне сравнить их потом.

Буду признателен за вашу помощь, спасибо.

Ответы [ 4 ]

2 голосов
/ 10 октября 2019

Я хотел бы решить несколько вопросов:

  1. Вы всегда можете использовать [System.DateTime]::Parse() для каждого из форматов. Вам не нужно использовать [System.DateTime]::ParseExact().

  2. Вы можете использовать Get-Date вместо C #. Используйте нативные функции, когда это возможно. Get-Date $SomeDate всегда будет давать вам одинаковые результаты с [System.DateTime]::Parse($SomeDate).

  3. Неизвестная проблема - это один из форматов, которые заботятся о Часовых поясах , а другой - нет. Надо над этим работать.
1 голос
/ 10 октября 2019

Вы можете использовать Get-Date для преобразования строк в [DateTime] объекты, которые затем можно легко сравнить:

$date1 = Get-Date '2016-12-15T08:08:39.012+01:00'
$date2 = Get-Date 'Thursday, December 15, 2016 7:08:39 AM'

$date1 -gt $date2
True

$date1 -lt $date2
False
1 голос
/ 10 октября 2019

вы можете сохранить обе даты в переменной и изменить ее на определенный формат, например, Get-Date $date -Format "yyyy-MM-dd hh:mm:ss", а затем вы можете сравнить даты, например:

$date="Thursday, December 15, 2016 7:08:39 AM"
Get-Date $date -Format "yyyy-MM-dd hh:mm:ss"

$date="2016-12-15T08:08:39.012+01:00"
Get-Date $date -Format "yyyy-MM-dd hh:mm:ss"

для обоих выходных данных будет в одном формате

0 голосов
/ 10 октября 2019

Спасибо за объяснения, это было очень полезно. Мне удалось сравнить и скорректировать разницу часовых поясов следующим образом:

$date1 = Get-Date '2016-12-15T08:08:39.012+01:00' $date2 = (Get-Date 'Thursday, December 15, 2016 7:08:39 AM').AddHours(1)

Сравнивая свойство .DateTime, я получу оценку, которая будет истинной:

$date1.DateTime -eq $date2.DateTime True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...