Дата разбора Powershell ISO8601 - PullRequest
       0

Дата разбора Powershell ISO8601

0 голосов
/ 12 февраля 2020

У меня есть строка даты в формате, который я считаю ISO8601 (хотя я не уверен на 100%), например,

20200210T165905+0000

Я хочу проанализировать это с помощью powershell и пробовал следующее

$Date = "20200210T165905+0000"
$DatePattern = "yyyyMMdd\THHmmss\+zzzz"
$DateTime = [DateTime]::ParseExact($Date, $DatePattern, $null)

но я получаю следующую ошибку

Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."

Что я делаю не так?

Ответы [ 2 ]

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

Для имеющегося у вас формата даты требуется другой шаблон, в котором информация о часовом поясе обрабатывается как K.

+0000 означает, что дата указана в UT C времени (смещение 0). Если вы удалите это, строка даты анализируется, как если бы она была МЕСТНЫМ DateTime, давая вам ложную информацию (если вы не живете в той части мира, где UT C совпадает с местным временем)

$Date = "20200210T165905+0000"
$DatePattern = "yyyyMMddTHHmmssK"
$DateTime = [DateTime]::ParseExact($Date, $DatePattern, $null)
$DateTime

Возвращает (в моем NL Locale => UT C + 1)

10-2-2020 17:59:05
0 голосов
/ 12 февраля 2020

Удаление экранированного символа \+ из шаблона, кажется, исправило это для меня, то есть

$DatePattern = "yyyyMMdd\THHmmsszzzz"

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