Я могу отформатировать Get-Date
командлет без проблем, как это:
$date = Get-Date -format "yyyyMMdd"
Но как только я получил дата в переменной, как мне ее отформатировать? Утверждение ниже
$dateStr = $date -format "yyyMMdd"
возвращает эту ошибку:
«Вы должны предоставить выражение значения в правой части оператора -f»
$date -format "yyyMMdd"
гораздо более интуитивно понятен для форматирования одного объекта, чем'{0:yyyyMMdd}' -f $date
.-f
оператор (с синтаксисом, как показано в принятом ответе), но нет-format
оператора. Сообщение об ошибке жалуется на то, что онormat
не является допустимым операндом RHS, но обратите внимание, что последние версии PowerShell фактически выдают другое, более полезное сообщение об ошибке:Unexpected token '-format' in expression or statement
Ответы:
Так же, как и в .NET :
Или:
источник
На вопрос дан ответ, но отсутствует дополнительная информация:
Переменная против командлета
У вас есть значение в
$Date
переменной и-f
оператор делает работу в таком виде:'format string' -f values
. Если вы звоните,Get-Date -format "yyyyMMdd"
вы вызываете командлет с некоторыми параметрами. Значение "yyyyMMdd" является значением для параметраFormat
(tryhelp Get-Date -param Format
).-f
операторЕсть много строк формата. Посмотрите хотя бы на часть1 и часть2 . Она использует
string.Format('format string', values')
. Думайте об этом как'format-string' -f values
, потому что-f
оператор работает очень похоже какstring.Format
метод (хотя есть некоторые различия (для получения дополнительной информации посмотрите на вопрос о переполнении стека: как именно работает RHS оператора -f PowerShell? ).источник
Вы могли бы сделать одну вещь:
источник
Очень удобное - но, вероятно, не слишком эффективное - решение состоит в том, чтобы использовать функцию-член
GetDateTimeFormats()
,Это выводит большой строковый массив стилей форматирования для значения даты. Затем вы можете выбрать один из элементов массива через
[]
оператор, например,источник
Простой и приятный способ это:
$time = (Get-Date).ToString("yyyy:MM:dd")
источник
Сделайте это, если вам абсолютно необходимо использовать
-Format
опцию:тем не мение
вероятно, более эффективно .. :)
источник
$dateStr = (Get-Date $date -Format "yyyMMdd")
приводит к типу объекта, который отличается от объекта datetime. Попробуйте поиграть с этим.$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Вы сразу увидите разницу.Если вы пришли сюда, чтобы использовать это в
cmd.exe
(в пакетном файле):источник
Мне нужно было время и небольшие изменения в формате. Это прекрасно работает для моих целей:
Согласно @ mklement0 в комментариях, это должно дать тот же результат:
источник
Очень информативный ответ от @stej , но вот короткий ответ: среди прочих вариантов у вас есть 3 простых варианта форматирования [System.DateTime], хранящихся в переменной:
Передайте переменную в командлет Get-Date :
Get-Date -Format "HH:mm" $date
Используйте метод toString () :
$date.ToString("HH:mm")
Использовать составное форматирование :
"{0:HH:mm}" -f $date
источник
Для тех, кто пытается отформатировать текущую дату для использования в заголовке HTTP, используйте формат «r» (сокращение от RFC1123), но остерегайтесь предостережения ...
Т.е. не забудьте использовать «ToUniversalTime ()»
источник