Ich kann das Get-Date
Cmdlet problemlos so formatieren:
$date = Get-Date -format "yyyyMMdd"
Aber wie formatiere ich ein Datum in einer Variablen? Die Aussage unten
$dateStr = $date -format "yyyMMdd"
gibt diesen Fehler zurück:
"Sie müssen einen Wertausdruck auf der rechten Seite des Operators '-f' angeben."
datetime
powershell
Ev.
quelle
quelle
$date -format "yyyMMdd"
ist für die Formatierung eines einzelnen Objekts viel intuitiver als'{0:yyyyMMdd}' -f $date
.-f
Operator (mit der in der akzeptierten Antwort angegebenen Syntax), aber keinen-format
Operator. In der Fehlermeldung wird beanstandet, dass es sichormat
nicht um einen gültigen RHS-Operanden handelt. Beachten Sie jedoch, dass neuere PowerShell-Versionen tatsächlich eine andere, hilfreichere FehlermeldungUnexpected token '-format' in expression or statement
Antworten:
Das gleiche wie in .NET :
Oder:
quelle
Die Frage wird beantwortet, es fehlen jedoch weitere Informationen:
Variable vs. Cmdlet
Sie haben einen Wert in der
$Date
Variablen und der-f
Operator arbeitet in dieser Form :'format string' -f values
. Wenn Sie aufrufen, rufenGet-Date -format "yyyyMMdd"
Sie ein Cmdlet mit einigen Parametern auf. Der Wert "yyyyMMdd" ist der Wert für den ParameterFormat
(tryhelp Get-Date -param Format
).-f
OperatorEs gibt viele Formatzeichenfolgen. Schauen Sie zumindest bei Teil1 und Teil2 . Sie benutzt
string.Format('format string', values')
. Stellen Sie sich das so vor'format-string' -f values
, weil der-f
Operator sehr ähnlich wie diestring.Format
Methode funktioniert (obwohl es einige Unterschiede gibt (weitere Informationen finden Sie unter Frage unter Stapelüberlauf: Wie genau funktioniert die RHS des PowerShell-Operators -f? ).quelle
Eine Sache, die Sie tun könnten, ist:
quelle
Eine sehr bequeme - aber wahrscheinlich nicht allzu effiziente - Lösung ist die Verwendung der Elementfunktion
GetDateTimeFormats()
.Dies gibt ein großes String-Array von Formatierungsstilen für den Datumswert aus. Sie können dann eines der Elemente des Arrays über den
[]
Operator auswählen, z.quelle
Ein einfacher und schöner Weg ist:
$time = (Get-Date).ToString("yyyy:MM:dd")
quelle
Tun Sie dies, wenn Sie die
-Format
Option unbedingt verwenden müssen :jedoch
ist wahrscheinlich effizienter .. :)
quelle
$dateStr = (Get-Date $date -Format "yyyMMdd")
führt zu einem Objekttyp, der sich von einem Datum / Uhrzeit-Objekt unterscheidet. Versuchen$dateStr = [datetime](Get-Date $date -Format "yyyMMdd")
Sie, damit herumzuspielen. Sie werden den Unterschied sofort erkennen.Wenn Sie hierher gekommen sind, um dies in
cmd.exe
(in einer Batch-Datei) zu verwenden:quelle
Ich brauchte die Zeit und eine leichte Variation des Formats. Dies funktioniert hervorragend für meine Zwecke:
Laut @ mklement0 in Kommentaren sollte dies das gleiche Ergebnis liefern:
quelle
Sehr informative Antwort von @stej , aber hier ist eine kurze Antwort: Unter anderem haben Sie 3 einfache Optionen zum Formatieren von [System.DateTime], die in einer Variablen gespeichert sind:
Übergeben Sie die Variable an das Cmdlet Get-Date :
Get-Date -Format "HH:mm" $date
Verwenden Sie die toString () -Methode :
$date.ToString("HH:mm")
Verwenden Sie die zusammengesetzte Formatierung :
"{0:HH:mm}" -f $date
quelle
Wenn Sie versuchen, das aktuelle Datum für die Verwendung in einem HTTP-Header zu formatieren, verwenden Sie das Format "r" (kurz für RFC1123). Beachten Sie jedoch die ...
Dh nicht vergessen, "ToUniversalTime ()" zu verwenden
quelle