Попытка преобразовать массив строк в дату - PullRequest
2 голосов
/ 29 февраля 2020

Я сталкиваюсь со странной проблемой, когда пытаюсь разобрать массив следующих строк, которым была присвоена переменная $DatesUnformatted:

2020-02-28T05:29:00Z
2020-02-28T04:52:00Z
2020-02-28T04:52:00Z
2020-02-27T17:01:00Z
2020-02-27T17:01:00Z
2020-02-27T17:01:00Z
2020-02-27T17:01:00Z

... за раз формат (hh:mm tt) с использованием [DateTime]::ParseExact().

Мой скрипт выглядит примерно так:

foreach ($DateUnformatted in $DatesUnformatted)
{
    $DateFormatted = [datetime]::parseexact($DateUnformatted, 'yyyy-MM-ddThh:mm:ssZ',$null).ToString('hh:mm tt')
    echo "Converting $DateUnformatted to $DateFormatted"
}

А вот вывод:

Converting 2020-02-28T05:29:00Z to 12:29 AM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM

Кажется как будто он конвертирует только первые несколько записей, затем просто повторяет одну до конца l oop. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2020

hh работает только для 12 -часовых форматов времени (с обозначениями AM / PM), в то время как ваш ввод использует 24-часовой формат, для которого вы должны использовать HH:

[datetime]::ParseExact(
  $DateUnformatted, 
  'yyyy-MM-ddTHH:mm:ssZ', # note the 'HH'
  $null
).ToString('hh:mm tt')

Ваш симптом подразумевает, что $ErrorActionPreference = 'SilentlyContinue' действовал, в противном случае вы бы увидели, как метод ParseExact() громко вызывает ошибки завершения оператора, с сообщениями об ошибках, такими как:

Exception calling "ParseExact" with "3" argument(s): "String '2020-02-27T17:01:00Z' was not recognized as a valid DateTime."

В любом случае, последний успешный результат вызова задерживается в переменной $DateFormatted.

0 голосов
/ 01 марта 2020

Вы также можете просто неявно преобразовывать строки во время данных следующим образом:

([datetime]'2020-02-28T04:52:00Z').ToString('hh:mm tt')

Полный код:

$DatesUnformatted | foreach { "Converting $_ to " + ([datetime]$_).ToString('hh:mm tt') }
...