Tags: PowerShell, Datum
Ruft man das Cmdlet Get-Date ohne Argumente auf, dann gibt es nur das Systemdatum aus. Daraus soll man jedoch nicht den voreiligen Schluss ziehen, dass es sich dabei nur um die Powershell-Entsprechung zum date-Befehl von cmd.exe handelt. Vielmehr beherrscht es fast beliebige Datumsberechnungen und Datumsformate.
Wie in vielen anderen Bereichen bringt Powershell auch bei der Kalkulation von Datumswerten einen erheblichen Fortschritt gegenüber den Möglichkeiten von cmd.exe und Batch-Dateien. Das beginnt schon bei einfacheren Aufgaben und wird etwa bei der Berechnung von Wochentagen offensichtlich, die in einer Batchdatei nur mit Mühe zu bewältigen ist.
Einfaches Auslesen von Tag, Monat, Jahr, etc.
Zu den simplen Aufgaben gehört es, die Bestandteile eines Datums zu extrahieren, sei es Monat, Jahr oder Wochentag. Sie alle sind Eigenschaften eines datetime-Objekts und lassen sich ohne umständliches Parsen einer Zeichenkette direkt ausgeben. Lädt man zum Beispiel die aktuelle Systemzeit in die Variable $datum
$datum = Get-Date
dann kann man auf einzelne Teile des Datums so zugreifen:
$datum.Day # Tag des Monats (numerisch)
$datum.Month # Monat (numerisch)
$datum.DayOfWeek # Wochentag (String auf Englisch, also z.B. "Monday")
Dabei werden keine Zeichenketten ausgelesen, vielmehr berechnet das datetime-Objekt die Werte der betreffenden Eigenschaften. Das erkennt man daran, dass man Get-Date mit einem beliebigen Datum laden und daraus die einzelnen Properties abrufen kann:
(Get-Date "24.08.2012").DayOfWeek
gibt den Wochentag des 24. August 2012 aus.
Wochentag auf Deutsch ausgeben
Wie schon erwähnt, hat die DayOfWeek-Eigenschaft den Nachteil, dass der Wert auf Englisch ausgegeben wird. Wer die deutschen Wochentage möchte, kann sie über den Parameter -Format bekommen:
Get-Date "24.08.2012" -Format dddd
Voraussetzung dafür ist jedoch, dass man bei den Einstellungen für das regionale Format und die Region auf dem betreffenden Rechner ein deutschsprachiges Land ausgewählt hat. Dies kann man mit
Get-Culture
überprüfen. Davon hängt auch ab, wie PowerShell die Zeichenkette für das Datum interpretiert. Ist Culture auf en-US konfiguriert, dann führt das Datum "24.08.2012" zur folgenden Fehlermeldung, weil 24 als Wert für den Monat genommen wird:
Get-Date : Der Parameter "Date" kann nicht gebunden werden. Der Wert "24.08.2022" kann nicht in den Typ "System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
Der Parameter -Format eignet sich natürlich nicht nur, um bestimmte Werte aus dem Datum auszulesen, sondern um die Ausgabe praktisch nach Belieben zu gestalten, etwa
Get-Date -Format d.M.yyyy
um es ohne Uhrzeit und Wochentag in Kurzform darzustellen.
Arithmetische Operationen mit Datumsangaben
Neben den zahlreichen Eigenschaften bietet ein date-time-Objekt noch Methoden, die alle möglichen Berechnungen von Datumwerten erlauben. So kann man mit Hilfe von AddDays eine bestimmte Anzahl von Tagen zu einen Datum addieren, das Gleiche funktioniert mit entsprechenden Funktionen auch mit Monaten, Stunden, Minuten, etc. Zum Beispiel gibt
(Get-Date "24.08.2012").AddDays(30).DayOfWeek
den Wochentag jenes Datums aus, das 30 Tage nach dem 24. August 2012 liegt. Bei Berechnungen von Datumswerten ist auch einfach der Einsatz von arithmetischen Operatoren erlaubt:
(Get-Date "24.12.2012").DayOfYear - (Get-Date).DayOfYear
Dieses Beispiel berechnet, wie viele Tage es noch bis Weihnachten dauert.
Nur Datum oder nur Zeit extrahieren
Interessant sind zwei weitere Methoden, wenn man aus einem date-time-Objekt nur den Datums- oder Zeitanteil extrahieren will. Es handelt sich dabei um ToShortDateString() und ToShortTimeString(). So gibt
(Get-Date).ToShortTimeString()
nur die aktuelle Zeit ohne Datum aus. Wer sich eine Übersicht über alle Eigenschaften und Methoden eines date-time-Objekts verschaffen will, kann dies mit dem Befehl
Get-Date|Get-Member
tun.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links
5 Kommentare
the following script returns nicley Monday Tuesday etc., but I would like to have the days of the week in German. The script with -format dddd does not work, it return me a + sign.
or /f %%i in ('powershell ^(get-date^).DayOfWeek') do set DayOfWeek=%%i
echo ----------
echo Day of week is: %DayOfWeek%
echo ----------
pause
or /f %%i in ('powershell ^(get-date^).DayOfWeek -format dddd') do set DayOfWeek=%%i
echo ----------
echo Day of week is: %DayOfWeek%
echo ----------
pause
Ich würde zuerst mit get-culture prüfen, ob die Einstellungen für Region und Format auf de-DE gesetzt sind.
Wie bekommt man es hin das er mir bei einstelligen Monaten die Null voranstellt?
z.B. bei
$neu = Get-date
Write-Host $neu.Month
das statt der 9 die 09 kommt?
Das lässt sich mit dem Format-Operator -f erreichen. Der verlinkte Text zeigt auch das Vorgehen bei Datumswerten.
Danke hat geklappt!