2010-02-12 23 views
86

puedo formatear el Get-Date commandlet ningún problema como este:¿Cómo formatear un DateTime en PowerShell?

$date = Get-Date -format "yyyyMMdd" 

pero una vez Tengo a date en una variable, ¿cómo puedo darle formato? La siguiente declaración

$dateStr = $date -format "yyyMMdd" 

devuelve este error:

"You must provide a value expression on the right-hand side of the '-f' operator"

+1

Realmente deseaba que funcionara esta sintaxis. '$ date-formato" yyyMMdd "' es mucho más intuitivo para formatear un solo objeto que ''{0: aaaamMMdd}' -f $ date'. – orad

Respuesta

126

Igual que lo haría en .NET.

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

o

$DateStr = '{0:yyyyMMdd}' -f $Date 
+1

Gracias por la respuesta -f compañero! –

+1

Cómo formatear aaaammddhhmm Señor? – toha

+1

Creo que esto: $ Date = Get-Date-format "yyyyMMddhhmm" Gracias – toha

9

Una cosa que podría hacer es:

$date.ToString("yyyyMMdd") 
+0

Gracias, hice esto, me molesta que el formato no funciona. –

+0

Ya, la solución de @Josh Einstein está justo en el dinero :) –

19

La pregunta se responde, pero hay algo más de información faltante:

variable vs. Cmdlet

Usted tiene un valor en $Date variable y el operador -f funciona de esta forma: 'format string' -f values. Si llama al Get-Date -format "yyyyMMdd", llama al cmdlet con algunos parámetros. El valor "aaaamMMdd" es el valor para el parámetro Format (intente help Get-Date -param Format).

-f operador

Hay un montón de cadenas de formato, mira por lo menos en part1 y part2. Ella usa string.Format('format string', values'). Piense en ello como 'format-string' -f values, porque el operador -f funciona de manera muy similar como string.Format método (aunque hay algunas diferencias (para más información mira cuestión en desbordamiento de pila:. How exactly does the RHS of PowerShell's -f operator work?)

+0

Muchas gracias por la información. –

+2

Lo que está diciendo es que el parámetro -Format hace que Get-DateTime devuelva una cadena, no un objeto DateTime. Por lo tanto, su variable $ Date ya no se puede formatear como se esperaba. REALMENTE deseo que el parámetro -Format simplemente cambie el comportamiento predeterminado de un método ToString de un objeto DateTime en particular. Entonces funcionaría como esperabas. –

1

Una manera sencilla y agradable es:

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

o simplemente

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

4

Un muy conveniente - pero probablemente no demasiado eficiente - solución es utilizar la función miembro GetDateTimeFormats(),

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

Esto da salida a una gran cadena de gama de estilos de formato para la fecha-valor. A continuación, puede elegir uno de los elementos de la matriz a través del operador [], p. Ej.,

PS C:\> $d.GetDateTimeFormats()[12] 
Dienstag, 29. November 2016 19.14 
0

Si llegaras a usar esto en DOS:

powershell -Command (Get-Date).ToString('yyyy-MM-dd') 
1

¿Cómo hacer esto si es absolutamente necesario utilizar la opción -Formato:

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

Sin embargo

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

es probablemente más eficiente .. :)

+0

'$ dateStr = (Fecha de llegada $ fecha -Formato" yyyMMdd ")' da como resultado un tipo de objeto que es diferente de un objeto datetime. Intenta jugar con este '$ dateStr = [datetime] (Get-Date $ date -Format" yyyMMdd ")' Verás la diferencia de inmediato. –

+0

Bueno, sí ... Es una cadena, por eso lo llamé dateStr .. :) OP intentaba formatear un objeto de fecha en una Cadena. – tplive

Cuestiones relacionadas