Puedo formatear el Get-Date
cmdlet sin problemas como este:
$date = Get-Date -format "yyyyMMdd"
Pero una vez que tengo una fecha en una variable, ¿cómo la formateo? La siguiente declaración
$dateStr = $date -format "yyyMMdd"
devuelve este error:
"Debe proporcionar una expresión de valor en el lado derecho del operador '-f'"
datetime
powershell
Ev.
fuente
fuente
$date -format "yyyMMdd"
es mucho más intuitivo para formatear un solo objeto que'{0:yyyyMMdd}' -f $date
.-f
operador (con la sintaxis como se muestra en la respuesta aceptada), pero no tiene-format
operador. El mensaje de error se queja de queormat
no es un operando RHS válido, pero tenga en cuenta que las versiones recientes de PowerShell realmente emiten un mensaje de error diferente y más útil:Unexpected token '-format' in expression or statement
Respuestas:
Lo mismo que lo haría en .NET :
O:
fuente
La pregunta se responde, pero falta más información:
Variable vs Cmdlet
Usted tiene un valor en el
$Date
variable y el-f
operador funciona en este formulario:'format string' -f values
. Si llamaGet-Date -format "yyyyMMdd"
, llame a un cmdlet con algunos parámetros. El valor "aaaamMMdd" es el valor del parámetroFormat
(tryhelp Get-Date -param Format
).-f
operadorHay muchas cadenas de formato. Mira lo menos en parte 1 y parte 2 . Ella utiliza
string.Format('format string', values')
. Piense en ello como'format-string' -f values
porque el-f
operador funciona de manera muy similar alstring.Format
método (aunque existen algunas diferencias (para obtener más información, consulte la pregunta en Desbordamiento de pila: ¿cómo funciona exactamente el RHS del operador -f de PowerShell? ).fuente
Una cosa que puedes hacer es:
fuente
Una solución muy conveniente, pero probablemente no demasiado eficiente, es utilizar la función miembro
GetDateTimeFormats()
,Esto genera una gran variedad de estilos de formato para el valor de fecha. Luego puede elegir uno de los elementos de la matriz a través del
[]
operador, por ejemplo,fuente
Una manera simple y agradable es:
$time = (Get-Date).ToString("yyyy:MM:dd")
fuente
Haga esto si absolutamente necesita usar la
-Format
opción:sin embargo
es probablemente más eficiente .. :)
fuente
$dateStr = (Get-Date $date -Format "yyyMMdd")
da como resultado un tipo de objeto que es diferente de un objeto datetime. Intenta jugar con esto$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
. Verás la diferencia de inmediato.Si llegó aquí para usar esto en
cmd.exe
(en un archivo por lotes):fuente
Necesitaba el tiempo y una ligera variación en el formato. Esto funciona muy bien para mis propósitos:
Según @ mklement0 en los comentarios, esto debería arrojar el mismo resultado:
fuente
Respuesta muy informativa de @stej , pero aquí hay una respuesta breve: entre otras opciones , tiene 3 opciones simples para formatear [System.DateTime] almacenadas en una variable:
Pase la variable al cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Utilice el método toString () :
$date.ToString("HH:mm")
Usar formato compuesto :
"{0:HH:mm}" -f $date
fuente
Para cualquiera que intente formatear la fecha actual para usar en un encabezado HTTP, use el formato "r" (abreviatura de RFC1123) pero tenga cuidado con la advertencia ...
Es decir, no olvides usar "ToUniversalTime ()"
fuente