Posso formatar o Get-Date
cmdlet sem problemas como este:
$date = Get-Date -format "yyyyMMdd"
Mas uma vez que eu tenho uma data em uma variável, como a formato? A declaração abaixo
$dateStr = $date -format "yyyMMdd"
retorna este erro:
"Você deve fornecer uma expressão de valor no lado direito do operador '-f'"
datetime
powershell
Ev.
fonte
fonte
$date -format "yyyMMdd"
é muito mais intuitivo para formatar um único objeto do que'{0:yyyyMMdd}' -f $date
.-f
operador (com a sintaxe mostrada na resposta aceita), mas nenhum-format
operador. A mensagem de erro está reclamando deormat
não ser um operando RHS válido, mas observe que as versões recentes do PowerShell emitem uma mensagem de erro diferente e mais útil:Unexpected token '-format' in expression or statement
Respostas:
O mesmo que você faria no .NET :
Ou:
fonte
A pergunta é respondida, mas há mais algumas informações ausentes:
Variável vs. Cmdlet
Você tem um valor na
$Date
variável eo-f
operador não funciona desta forma:'format string' -f values
. Se você chamar,Get-Date -format "yyyyMMdd"
chame um cmdlet com alguns parâmetros. O valor "aaaamMMdd" é o valor do parâmetroFormat
(tryhelp Get-Date -param Format
).-f
operadorExistem várias seqüências de formato. Veja pelo menos a parte1 e a parte2 . Ela usa
string.Format('format string', values')
. Pense nisso como'format-string' -f values
, porque o-f
operador trabalha de maneira muito semelhante aostring.Format
método (embora existam algumas diferenças (para obter mais informações, veja a pergunta no Stack Overflow: Como exatamente o RHS do operador -f do PowerShell funciona )).fonte
Uma coisa que você pode fazer é:
fonte
Uma solução muito conveniente - mas provavelmente nem muito eficiente - é usar a função membro
GetDateTimeFormats()
,Isso gera uma grande variedade de estilos de formatação para o valor da data. Você pode escolher um dos elementos da matriz via
[]
-operator, por exemplo,fonte
Uma maneira simples e agradável é:
$time = (Get-Date).ToString("yyyy:MM:dd")
fonte
Faça isso se você absolutamente precisar usar a
-Format
opção:Contudo
é provavelmente mais eficiente .. :)
fonte
$dateStr = (Get-Date $date -Format "yyyMMdd")
resulta em um tipo de objeto diferente de um objeto datetime. Tente brincar com isso$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Você verá a diferença imediatamente.Se você chegou aqui para usá-lo
cmd.exe
(em um arquivo em lotes):fonte
Eu precisava do tempo e uma ligeira variação no formato. Isso funciona muito bem para meus propósitos:
De acordo com @ mklement0 nos comentários, isso deve render o mesmo resultado:
fonte
Resposta muito informativa do @stej , mas aqui está uma resposta curta: Entre outras opções , você tem 3 opções simples para formatar [System.DateTime] armazenado em uma variável:
Passe a variável para o cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Use o método toString () :
$date.ToString("HH:mm")
Use a formatação composta :
"{0:HH:mm}" -f $date
fonte
Para qualquer pessoa que esteja tentando formatar a data atual para uso em um cabeçalho HTTP, use o formato "r" (abreviação de RFC1123), mas cuidado com o aviso ...
Ou seja, não se esqueça de usar "ToUniversalTime ()"
fonte