2012-04-05 17 views
21

Dizimde, bir dize içinde bir datetime değişkeninin biçimlendirilmesinin nasıl çalıştığını anlayamıyorum. Ben ISO 8601 isterken PowerShell'i Biçimlendirme Dizenin içindeki Get-Date

$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)." 

bana ABD tarih biçimini verir.

Ben

$(Get-Date -Format u) 

kullanabilirsiniz ama zaman hesaplanması doğru yapmak için $ endTime kullanmak istiyorum.

$, (,), endTime, -format, u, .ToString (...) ve .ToShortDate() öğelerinin tüm izinlerini denedim, ancak çalışanı.

cevap

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

veya

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

alt ekspresyonu ($(...)) isteğe bağlı ifadeleri içerebilir çağırır.

MSDN Dokümanları hem standard and custom DateTime format strings.

4

yerine string interpolation kullanmanın sadece dize geri kalanı ile bu ToString("u") yöntemi ve CONCATENATE kullanılarak DateTime biçimlendirebilirdiniz:

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

Geçerli çözüm. Olsa da "dize içinde string" yok. String-inside-string yerine bitmemem için/gerçek/sebep yok. – LosManos

+0

Kesinlikle doğru. @ Richard'ın cevabı en iyisidir. –

25

Sen -f operatörünü kullanabilirsiniz

$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

[standart] için MSDN sayfaları (http://msdn.microsoft.com/en-us/library/az4se3k1.aspx) ve [özel] (http://msdn.microsoft.com/en-us/library/ 8kb3ddd4.aspx) biçim dizeleri farklı dillerde bile çok sayıda örnek var :). Benim fikrimce tercih edilen format dizilerini önermek için +1. – Joey

+0

$ a bir dizge haline geldi, n'est-ce pas? Gerçek bir string nesnesine ihtiyacım vardı. Önce biçimlendirmenin ayarlanması ve ardından değer benim için yeniydi. Teşekkürler. – LosManos

+0

Teşekkürler @Joey, parmağımı bu sayfalara yerleştiremedim, bu yüzden dokümümden birini yapıştırın. – JPBlanc