Как отформатировать DateTime в PowerShell - PullRequest
128 голосов
/ 12 февраля 2010

Я могу отформатировать командлет Get-Date без проблем:

$date = Get-Date -format "yyyyMMdd"

Но как только я получу дату в переменной, как мне отформатировать ее? Заявление ниже

$dateStr = $date -format "yyyMMdd"

возвращает эту ошибку:

"Вы должны предоставить выражение значения на правой стороне от '-f' оператор "

Ответы [ 9 ]

188 голосов
/ 12 февраля 2010

Так же, как в .NET :

$DateStr = $Date.ToString("yyyyMMdd")

Или:

$DateStr = '{0:yyyyMMdd}' -f $Date
22 голосов
/ 12 февраля 2010

На вопрос дан ответ, но отсутствует некоторая дополнительная информация:

Переменная против командлета

У вас есть значение в переменной $Date, и оператор -f работает в этой форме: 'format string' -f values. Если вы звоните Get-Date -format "yyyyMMdd", вы вызываете командлет с некоторыми параметрами. Значение "yyyyMMdd" является значением для параметра Format (try help Get-Date -param Format).

-f оператор

Есть много строк формата. Посмотрите хотя бы на part1 и part2 . Она использует string.Format('format string', values'). Думайте об этом как 'format-string' -f values, потому что оператор -f работает очень похоже на метод string.Format (хотя есть некоторые различия (для получения дополнительной информации посмотрите на вопрос по переполнению стека: Как точно работает ли RHS оператора PowerShell -f? ).

15 голосов
/ 29 ноября 2016

Очень удобное - но, вероятно, не слишком эффективное - решение состоит в использовании функции-члена GetDateTimeFormats(),

$d = Get-Date
$d.GetDateTimeFormats()

Это выводит большой строковый массив стилей форматирования для значения даты. Затем вы можете выбрать один из элементов массива через оператор [], например,

PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14
15 голосов
/ 12 февраля 2010

Одна вещь, которую вы могли бы сделать:

$date.ToString("yyyyMMdd")
9 голосов
/ 19 августа 2016

Простой и приятный способ:

$time = (Get-Date).ToString("yyyy:MM:dd")

или просто

(Get-Date).ToString("yyyy:MM:dd")

2 голосов
/ 23 мая 2017

Сделайте это, если вам абсолютно необходимо использовать опцию -Format:

$dateStr = (Get-Date $date -Format "yyyMMdd")

Тем не менее

$dateStr = $date.toString('yyyMMdd')

, вероятно, более эффективно ..:)

2 голосов
/ 17 мая 2017

Если вы пришли сюда, чтобы использовать это в DOS:

powershell -Command (Get-Date).ToString('yyyy-MM-dd')
1 голос
/ 16 мая 2019

Для тех, кто пытается отформатировать текущую дату для использования в заголовке HTTP используйте формат "r" (сокращение от RFC1123), но остерегайтесь предостережения ...

PS C:\Users\Me> (get-date).toString("r")
Thu, 16 May 2019 09:20:13 GMT
PS C:\Users\Me> get-date -format r
Thu, 16 May 2019 09:21:01 GMT
PS C:\Users\Me> (get-date).ToUniversalTime().toString("r")
Thu, 16 May 2019 16:21:37 GMT

т.е. Не забудьте использовать «ToUniversalTime ()»

1 голос
/ 17 августа 2018

Очень информативно ответ от @ stej , но вот короткий ответ: Среди других опций у вас есть 3 простых опции для форматирования [System.DateTime], хранящихся в переменной:

  1. Передайте переменную в командлет Get-Date : Get-Date -Format "HH:mm" $date

  2. Использовать метод toString () : $date.ToString("HH:mm")

  3. Использование Составное форматирование : "{0:HH:mm}" -f $date

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