Формат даты / времени нечетного результата - Powershell - PullRequest
0 голосов
/ 29 июня 2018

Я передаю строку, которая представляет дату, то есть 20180625, моему скрипту Powershell.

Затем я беру строковый параметр, который называется $ currentDate, и форматирую его следующим образом:

$date = [datetime]::ParseExact($currentDate,"yyyyMMdd",$null)

Однако, когда я записываю переменную $ date, она отображается как 29.06.2008 в 12:00:00.

Я делаю это, потому что мне нужно получить день года для моего сценария:

$dayofyear = ($date).dayofyear

Который работает. Я просто ожидал, что $ date будет в формате yyyyMMdd. Просто любопытно, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

$date - это объект типа [datetime], который содержит точную меру времени в ticks. Например, временной интервал в 1 день будет 864000000000 тиков. Таким образом, невозможно иметь значения $null в меньшем поле (864 тика будут только несколько миллисекунд). $date выводит на консоль с форматированием по умолчанию, которое можно изменить. Однако, поскольку каждое поле до -Milliseconds заполняется как 0, когда этот формат по умолчанию содержит такие поля, как -hours, они будут отображаться как минимальное значение (в данном случае, ровно в 12:00).

0 голосов
/ 29 июня 2018

Параметр формата для ParseExact сообщает синтаксическому анализатору, в каком формате находится дата, в которую вы его даете. Возвращаемый объект - это объект DateTime, а не строка. Чтобы получить строку в нужном формате, используйте метод .ToString (), а затем укажите, в каком формате должна быть строка.

Как пример:

$currentDate = '20180629'
$date = [datetime]::ParseExact($currentDate,"yyyyMMdd",$null)
$dayOfYear = $date.DayOfYear
$date.ToString('yyyyMMdd')
...