it-swarm.com.de

So formatieren Sie eine DateTime in PowerShell

Ich kann das Get-Date cmdlet wie folgt formatieren:

$date = Get-Date -format "yyyyMMdd"

Aber sobald ich ein Datum in einer Variablen habe, wie formatiere ich es? Die Aussage unten

$dateStr = $date -format "yyyMMdd"

gibt diesen Fehler zurück:

"Sie müssen einen Wertausdruck Auf der rechten Seite des '-f' -Operators angeben."

110
Ev.

Das gleiche wie in .NET :

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

Oder:

$DateStr = '{0:yyyyMMdd}' -f $Date
174
Josh

Die Frage wurde beantwortet, aber es fehlen noch einige Informationen:

Variable vs. Cmdlet

Sie haben einen Wert in der Variablen $Date und der Operator -f funktioniert in der folgenden Form: 'format string' -f values. Wenn Sie Get-Date -format "yyyyMMdd" aufrufen, rufen Sie ein cmdlet mit einigen Parametern auf. Der Wert "yyyyMMdd" ist der Wert für den Parameter Formatversuchen Sie es mit help Get-Date -param Format).

-f operator

Es gibt viele Formatstrings. Schauen Sie sich zumindest _ (part1 und part2 an. Sie verwendet string.Format('format string', values'). Stellen Sie es sich als 'format-string' -f values vor, da der Operator -f sehr ähnlich wie die Methode string.Format funktioniert (obwohl es einige Unterschiede gibt (für weitere Informationen) Schauen Sie sich die Frage zu Stack Overflow an: Wie genau funktioniert der RHS-f-Operator von PowerShell?).

24
stej

Eine sehr bequeme - aber wahrscheinlich nicht allzu effiziente - Lösung ist die Verwendung der Member-Funktion GetDateTimeFormats() ,

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

Dies gibt ein großes String-Array von Formatierungsstilen für den Datumswert aus. Sie können dann über den Operator [] eines der Elemente des Arrays auswählen, z.

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

Ein einfacher und schöner Weg ist:

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

oder einfach

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

11
Stephen Miller

Eine Sache, die Sie tun könnten, ist:

$date.ToString("yyyyMMdd")
11
John Weldon

Tun Sie dies, wenn Sie unbedingt die -Format-Option verwenden müssen:

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

Jedoch

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

ist wahrscheinlich effizienter .. :)

2
tplive

Wenn Sie hierher gekommen sind, um dies unter DOS zu verwenden:

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

Für alle, die versuchen, das aktuelle Datum zu formatieren zur Verwendung in einem HTTP-Header verwenden Sie das "r" -Format (kurz für RFC1123), aber beachten Sie die Vorsichtsmaßnahmen ...

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

Das heißt Vergiss nicht "ToUniversalTime ()" zu benutzen

0
Peter L

Ich brauchte die Zeit und eine leichte Variation des Formats. Das funktioniert hervorragend für meine Zwecke:

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

2019-08-16 215757

0
Scott Beeson

Sehr informative Antwort von @stej , aber hier ist eine kurze Antwort: Unter anderen Optionen haben Sie 3 einfache Optionen zum Formatieren von [System.DateTime] in einer Variablen:

  1. Übergeben Sie die Variable an das Cmdlet Get-Date : Get-Date -Format "HH:mm" $date.

  2. Verwenden Sie toString () - Methode : $date.ToString("HH:mm") 

  3. Verwenden Sie Zusammengesetzte Formatierung : "{0:HH:mm}" -f $date

0
Eddie Kumar