Get-Date: Datum berechnen und formatieren in Powershell


    Tags: ,

    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

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Ähnliche 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

    Bild von Wolfgang Sommergut

    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?

    Bild von Wolfgang Sommergut

    Das lässt sich mit dem Format-Operator -f erreichen. Der verlinkte Text zeigt auch das Vorgehen bei Datumswerten.

    Danke hat geklappt!