Der ultimative Python datetime Leitfaden

    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 01.06.2020
    zuletzt aktualisiert am: 02.02.2023

    Python datetime: So machst du es richtig!

    Das Python datetime Modul gibt dir die Möglichkeit, mit dem Datum zu rechnen, dieses als String auszugeben oder einen String in ein Datumsobjekt zu konvertieren. Wie du das machen kannst, zeige ich dir im folgenden Artikel.

    Python date, time und datetime

    Das Modul datetime beinhaltet unter anderem die Klasse date. Du kannst mit date ein Datum darstellen, indem du es mit Jahr, Monat und Tag initialisierst.

    from datetime import date
    
    print(date(2025, 6, 30))
    # 2025-06-30

    Mit dem alternativen Konstruktor today kannst du das aktuelle Datum ausgeben lassen.

    print(date.today())
    # 2020-05-31

    Über die Attribute year, month und day kannst du auch nur auf Jahr, Monat oder Tag des Datums zugreifen.

    heute = date.today()
    print(f'Jahr: {heute.year}')
    print(f'Monat: {heute.month}')
    print(f'Tag: {heute.day}')
    2020-05-31
    Jahr: 2020
    Monat: 5
    Tag: 31

    Weiterhin steht uns noch die Klasse time zur Verfügung, um die Zeit darzustellen.

    from datetime import time
    
    print(time(23, 55, 12))
    print(time(12, 30, 25))
    23:55:12
    12:30:25

    Die Klasse datetime aus dem gleichnamigen Modul stellt eine Kombination aus Datum und Zeit dar.

    from datetime import datetime
    
    print(datetime(2022, 12, 31, 23, 59, 59))
    # 2022-12-31 23:59:59

    Sie verfügt unter anderem über den alternativen Konstruktor now. now erzeugt ein Objekt von datetime mit dem aktuellen lokalen Zeitpunkt.

    print(datetime.now())
    print(datetime.utcnow())
    2020-05-31 20:35:55.668337
    2020-05-31 18:35:55.668337

    Rechnen mit Python timedelta

    Um zu einem Datum einen Tag hinzuzurechnen, kannst du die Klasse timedelta verwenden. Ihr Konstruktor akzeptiert Werte für die Parameter days, weeks, seconds, microseconds, milliseconds, minutes, und hours. Im Folgenden werde ich primär days für Tage verwenden.

    from datetime import datetime, timedelta
    
    ein_tag = timedelta(days=1)
    print('1 Tag:', ein_tag)
    # 1 Tag: 1 day, 0:00:00

    weeks wird übrigens ebenfalls wie eine Anzahl von Tagen berechnet.

    sechs_wochen = timedelta(weeks=6)
    print('6 Wochen:', sechs_wochen)
    # 6 Wochen: 42 days, 0:00:00

    Um ein Datum 90 Tage in der Zukunft zu erhalten, kannst du demnach einfach das aktuelle Datum mit einem timedelta von 90 Tagen verrechnen.

    in_90_tagen = datetime.now() + timedelta(days=90)
    print(in_90_tagen)
    # 2020-08-29 20:35:55.673354

    Genauso kannst du das gestrige sowie das morgige Datum berechnen.

    heute = datetime.now()
    ein_tag = timedelta(days=1)
    gestern = heute - ein_tag
    morgen = heute + ein_tag
    print('Gestern:', gestern)
    print('Heute:', heute)
    print('Morgen:', morgen)
    Gestern: 2020-05-30 21:47:42.055916
    Heute: 2020-05-31 21:47:42.055916
    Morgen: 2020-06-01 21:47:42.055916

    Wenn du ein Objekt von datetime mit einem Anderen subtrahierst, erhältst du als Ergebnis ein Objekt von timedelta.

    print('Morgen - Gestern:', morgen - gestern)
    print('Gestern - Morgen:', gestern - morgen)
    Morgen - Gestern: 2 days, 0:00:00
    Gestern - Morgen: -2 days, 0:00:00

    Du kannst Objekte der Klasse datetime auch miteinander vergleichen.

    print(gestern < heute)
    # True
    print(heute < morgen)
    # True
    print(heute > morgen)
    # False
    print(gestern == morgen)
    # False

    datetime als String anzeigen mit strftime

    Mit strftime kannst du sogenannte Format Codes angeben, um datetimes in Strings umzuwandeln. Um den Tag auszugeben, gibt es die Format Codes %A, %a und %d. Der Erste gibt den Tag als Wort aus, der Zweite die Abkürzung und der Dritte gibt ihn als Zahl zurück.

    jetzt = datetime.now()
    print(f'Tag: {jetzt.strftime("%A")}')
    print(f'kurz: {jetzt.strftime("%a")}')
    print(f'Zahl: {jetzt.strftime("%d")}')
    
    in_30_tagen = jetzt + timedelta(days=30)
    print(f'Tag: {in_30_tagen.strftime("%A")}')
    print(f'kurz: {in_30_tagen.strftime("%a")}')
    print(f'Zahl: {in_30_tagen.strftime("%d")}')
    Tag: Sunday
    kurz: Sun
    Zahl: 31
    Tag: Tuesday
    kurz: Tue
    Zahl: 30

    Das gleiche tun für den Monat %B, %b und %m.

    print(f'Monat: {jetzt.strftime("%B")}')
    print(f'kurz: {jetzt.strftime("%b")}')
    print(f'Zahl: {jetzt.strftime("%m")}')
    
    print(f'Monat: {in_30_tagen.strftime("%B")}')
    print(f'kurz: {in_30_tagen.strftime("%b")}')
    print(f'Zahl: {in_30_tagen.strftime("%m")}')
    Monat: May
    kurz: May
    Zahl: 05
    Monat: June
    kurz: Jun
    Zahl: 06

    Für das Jahr gibt es nur %Y und %y.

    print(f'Jahr: {jetzt.strftime("%Y")}')
    print(f'kurz: {jetzt.strftime("%y")}')
    
    print(f'Jahr: {in_30_tagen.strftime("%Y")}')
    print(f'kurz: {in_30_tagen.strftime("%y")}')
    Jahr: 2020
    kurz: 20
    Jahr: 2020
    kurz: 20

    Weiterhin lassen sich Datum und Zeit gemeinsam wie auch einzeln so vollständig ausgeben.

    print(f'Datum & Zeit: {jetzt.strftime("%c")}')
    print(f'Datum: {jetzt.strftime("%x")}')
    print(f'Zeit: {jetzt.strftime("%X")}')
    
    print(f'Datum & Zeit: {in_30_tagen.strftime("%c")}')
    print(f'Datum: {in_30_tagen.strftime("%x")}')
    print(f'Zeit: {in_30_tagen.strftime("%X")}')
    Datum & Zeit: Sun May 31 20:50:09 2020
    Datum: 05/31/20
    Zeit: 20:50:09
    Datum & Zeit: Tue Jun 30 20:50:09 2020
    Datum: 06/30/20
    Zeit: 20:50:09

    Außerdem kannst du die Codes frei variieren.

    jetzt = datetime.now()
    print(jetzt.strftime("%I:%M:%S %p"))
    print(jetzt.strftime("%H:%M"))
    08:50:09 PM
    20:50

    Strings in Python datetime konvertieren

    Mit der Methode strptime kannst du Strings in datetimes konvertieren. Dazu musst du das Format des Strings in Form von Format Codes wie bereits bei strftime angeben.

    from datetime import datetime
    
    string = '1989-06-30 15:33:02'
    obj = datetime.strptime(string, '%Y-%m-%d %H:%M:%S')
    print(obj)
    # 1989-06-30 15:33:02

    Zeitzonen mit Python pytz

    Mit dem Modul pytz (https://pypi.org/project/pytz/) kannst du verschiedene Zeitzonen angeben, deren Datum und Uhrzeit zurückgegeben werden sollen.

    from datetime import datetime
    import pytz
    
    print(datetime.now())
    # 2020-06-01 00:02:56.716643
    print(datetime.now(pytz.utc))
    # 2020-05-31 22:02:56.725645+00:00

    Du kannst auch timezone von pytz direkt importieren, um die Zeitzone als String anzugeben.

    from pytz import timezone
    
    print(datetime.now(timezone('US/Eastern')))
    # 2020-05-31 18:02:57.165641-04:00
    print(datetime.now(timezone('Europe/Berlin')))
    # 2020-06-01 00:02:57.168643+02:00

    Fazit

    Das Modul datetime stellt unheimlich praktische Methoden bereit, um ein Datum mit einem anderen zu vergleichen. Ebenfalls ist es einfach möglich, selbst festzulegen, wie das Datum als String angezeigt werden soll oder von dem Datum ein paar Tage abzuziehen.

    Hast du Fragen? Gefällt dir etwas an dem Artikel besonders oder gar nicht? Lass es mich bitte mit einem Kommentar wissen.

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Python und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."

    - Lennart Sparbier

    100% kostenlos registrieren · keine Kreditkarte notwendig

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig