2012-04-05 28 views
21

No entiendo cómo formatear una variable de fecha y hora dentro de una cadena funciona en PowerShell.Formateo de PowerShell Get-Date dentro de la cadena

$startTime = Get-Date 
Write-Host "The script was started $startTime" 

...Do stuff... 

$endTime = Get-Date 
Write-Host "Done at $endTime. Time for the full run was: $(New-TimeSpan $startTime $endTime)." 

me da el formato de fecha de EE.UU., mientras que quiero ISO 8601.

que podría utilizar

$(Get-Date -Format u) 

pero quiero utilizar $ endTime para hacer el cálculo del intervalo de tiempo correcto.

He intentado todas las permutaciones de $, (,), endTime, -format, u, .ToString (...) y .ToShortDate(), pero la que funciona.

Respuesta

32
"This is my string with date in specified format $($theDate.ToString('u'))" 

o

"This is my string with date in specified format $(Get-Date -format 'u')" 

El sub-expresión ($(...)) puede incluir expresiones arbitrarias llamadas.

MSDN Documentos ambos standard and custom DateTime format strings.

4

En lugar de utilizar string interpolation simplemente podría formatear el DateTime utilizando el método y ToString("u")concatenar que con el resto de la cadena:

$startTime = Get-Date 
Write-Host "The script was started " + $startTime.ToString("u") 
+0

Solución válida. Sin embargo, carece de "cadena dentro de cadena". No hay/real/razón para que no concatené en lugar de string-inside-string. – LosManos

+0

Absolutamente correcto. La respuesta de @ Richard es la mejor. –

25

Usted puede utilizar el operador f

$a = "{0:D}" -f (get-date) 
$a = "{0:dddd}" -f (get-date) 

Spécificator Type        Example (with [datetime]::now) 
d Short date          26/09/2002 
D Long date          jeudi 26 septembre 2002 
t Short Hour          16:49 
T Long Hour          16:49:31 
f Date and hour         jeudi 26 septembre 2002 16:50 
F Long Date and hour        jeudi 26 septembre 2002 16:50:51 
g Default Date         26/09/2002 16:52 
G Long default Date and hour      26/09/2009 16:52:12 
M Month Symbol         26 septembre 
r Date string RFC1123        Sat, 26 Sep 2009 16:54:50 GMT 
s Sortable string date       2009-09-26T16:55:58 
u Sortable string date universal local hour  2009-09-26 16:56:49Z 
U Sortable string date universal GMT hour   samedi 26 septembre 2009 14:57:22 (oups) 
Y Year symbol          septembre 2002 

Spécificator Type      Example  Output Example 
dd    Jour      {0:dd}  10 
ddd    Name of the day   {0:ddd}  Jeu. 
dddd   Complet name of the day {0:dddd}  Jeudi 
f, ff, …  Fractions of seconds  {0:fff}  932 
gg, …   position     {0:gg}  ap. J.-C. 
hh    Hour two digits   {0:hh}  10 
HH    Hour two digits (24 hours) {0:HH}  22 
mm    Minuts 00-59    {0:mm}  38 
MM    Month 01-12    {0:MM}  12 
MMM    Month shortcut    {0:MMM}  Sep. 
MMMM   complet name of the month {0:MMMM}  Septembre 
ss    Seconds 00-59    {0:ss}  46 
tt    AM or PM     {0:tt}  ““ 
yy    Years, 2 digits   {0:yy}  02 
yyyy   Years      {0:yyyy}  2002 
zz    Time zone, 2 digits  {0:zz}  +02 
zzz    Complete Time zone   {0:zzz}  +02:00 
:    Separator     {0:hh:mm:ss}  10:43:20 
/    Separator     {0:dd/MM/yyyy} 10/12/2002 
+0

Las páginas de MSDN para [estándar] (http://msdn.microsoft.com/en-us/library/az4se3k1.aspx) y [personalizado] (http://msdn.microsoft.com/en-us/library/ 8kb3ddd4.aspx) cadenas de formato tienen muchos ejemplos, incluso en diferentes idiomas :). +1 para sugerir cadenas de formato que, en mi opinión, es preferible aquí. – Joey

+0

$ a se convierte en cadena, n'est-ce pas? Necesitaba un objeto de cadena real. La forma de establecer el formato primero y luego el valor era nuevo para mí. Gracias. – LosManos

+0

Gracias @Joey, simplemente no pude poner mi dedo en estas páginas, así que copie y pegue uno de mis documentos. – JPBlanc

Cuestiones relacionadas