PowerShell'de DateTime nasıl biçimlendirilir


156

Ben Get-Dateböyle bir sorun cmdlet biçimlendirebilirsiniz :

$date = Get-Date -format "yyyyMMdd"

Bende Ama bir kez bir tarih , bir değişkende, nasıl biçimlendiririm? Aşağıdaki ifade

$dateStr = $date -format "yyyMMdd"

bu hatayı döndürür:

"'-F' operatörünün sağ tarafında bir değer ifadesi sağlamalısınız"


3
Aslında bu sözdiziminin çalışmasını diledim. $date -format "yyyMMdd"tek bir nesneyi biçimlendirmek için olduğundan daha sezgiseldir '{0:yyyyMMdd}' -f $date.
orad

Bir kenara: PowerShell'in bir -foperatörü var (kabul edilen cevapta gösterilen sözdizimi ile), ancak -formatoperatör yok . Hata iletisi, ormatgeçerli bir RHS işleneni olmamasından şikayet ediyor , ancak son PowerShell sürümlerinin aslında farklı, daha yararlı bir hata iletisi Unexpected token '-format' in expression or statement
verdiğini unutmayın

Yanıtlar:



26

Soru cevaplandı, ancak daha fazla bilgi eksik:

Değişken ve Cmdlet Karşılaştırması

Sen bir değere sahip $Datedeğişken ve -foperatör bu formda çalışır: 'format string' -f values. Eğer ararsanız , bazı parametrelerle cmdlet'iGet-Date -format "yyyyMMdd" çağırırsınız . "YyyyMMdd" değeri (try ) parametresinin değeridir .Formathelp Get-Date -param Format

-f Şebeke

Birçok biçim dizesi vardır. En azından bölüm 1 ve bölüm 2'ye bakın . Kullanıyor string.Format('format string', values'). Bunu düşünün 'format-string' -f values, çünkü -foperatör string.Formatyöntemle çok benzer şekilde çalışır (bazı farklılıklar olsa da (daha fazla bilgi için Stack Overflow'da şu soruya bakın: RHS of PowerShell'in -f operatörü tam olarak nasıl çalışır? ).


3
Söylediği şey, -Format parametresinin Get-DateTime öğesinin DateTime nesnesi yerine dize döndürmesine neden olmasıdır. Böylece $ Date değişkeniniz artık beklendiği gibi biçimlendirilemez. GERÇEKTEN -Format parametresi sadece belirli bir DateTime nesnesinin ToString yönteminin varsayılan davranışını değiştirmek isterdim. O zaman beklediğiniz gibi çalışır.
Nathan Hartley

19

Yapabileceğiniz bir şey:

$date.ToString("yyyyMMdd")

Teşekkürler ben bunu yaptım - bana -format olsa işe yaramıyor.
Ev.

18

Çok kullanışlı - ama muhtemelen çok verimli olmayan - bir çözüm üye işlevini kullanmaktır GetDateTimeFormats(),

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

Bu, tarih değeri için büyük bir biçimlendirme stilleri dizesi çıktısı verir. Daha sonra dizinin öğelerinden birini []-operator ile seçebilirsiniz, örn.

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

16

Basit ve güzel bir yol:

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


2
Bu benim için sıfır değerli bir ifade hatası vermeyen tek yaklaşımdı. Teşekkürler.
Ecker00

7

-FormatSeçeneği kesinlikle kullanmanız gerekiyorsa bunu yapın :

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

ancak

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

muhtemelen daha verimlidir .. :)


$dateStr = (Get-Date $date -Format "yyyMMdd")bir datetime nesnesinden farklı bir nesne türüyle sonuçlanır. Bununla oynamayı deneyin $dateStr = [datetime](Get-Date $date -Format "yyyMMdd") Farkı hemen göreceksiniz.
Jamie Marshall

1
Evet, bu bir String, bu yüzden dateStr adını verdim. :) OP bir date nesnesini String'e biçimlendirmeye çalışıyordu.
tplive

4

Bunu cmd.exe(toplu iş dosyasında) olarak kullanmak için buraya geldiyseniz :

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

4

Biçime göre zamana ve küçük bir varyasyona ihtiyacım vardı. Bu benim amacım için harika çalışıyor:

$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")

2019-08-16 215757

Yorumlarda @ mklement0'a göre, bu aynı sonucu vermelidir:

(get-date).ToString("yyyy-MM-dd HHmmss")


3

Bir HTTP üstbilgisinde kullanmak üzere geçerli tarihi biçimlendirmeye çalışan herkes için "r" biçimini kullanın (RFC1123'ün kısaltması), ancak uyarıya dikkat edin ...

PS C:\Users\Me> (get-date).toString("r")
Thu, 16 May 2019 09:20:13 GMT
PS C:\Users\Me> get-date -format r
Thu, 16 May 2019 09:21:01 GMT
PS C:\Users\Me> (get-date).ToUniversalTime().toString("r")
Thu, 16 May 2019 16:21:37 GMT

Yani "ToUniversalTime ()" kullanmayı unutmayın


Bunu "xml" stili
JohnOpincar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.