Menu

Python datetime: Daten, Zeiten, Timedeltas und Zeitzonen

Eine praktische Tour durch Pythons datetime-Modul — Parsen, Formatieren, mit Daten rechnen und Zeitzonen behandeln, ohne sich zu verirren.

Die zwei Haupttypen: date und datetime

Das datetime-Modul gibt dir vier Dinge zum Merken: date, time, datetime und timedelta. Die ersten drei sind, was sie klingen; das vierte ist eine Zeitspanne.

main.py
Output
Click Run to see the output here.

Ein date stellt einen Tag dar — Jahr, Monat, Tag — ohne Uhrzeit. Ein datetime ist ein Datum plus eine Uhrzeit. Brauchst du keine Uhr, ist date die saubere Wahl.

Bestimmte Daten erzeugen

Direkt konstruieren:

main.py
Output
Click Run to see the output here.

Argumente sind year, month, day für date und bis zu year, month, day, hour, minute, second, microsecond für datetime.

Felder auslesen

Jedes date/datetime hat Attribute:

main.py
Output
Click Run to see the output here.

isoformat() ist dein Freund für maschinenlesbare Ausgabe — es produziert etwas wie "2026-04-20T09:30:15", das andere Systeme eindeutig parsen können.

Formatieren mit strftime

Für menschenlesbare Ausgabe wandelt .strftime(fmt) ein date oder datetime in einen formatierten String:

main.py
Output
Click Run to see the output here.

Die Formatcodes, die du am ehesten kennen solltest:

  • %Y — vierstelliges Jahr (2026)
  • %m — Monatszahl mit Null (04)
  • %d — Tag des Monats mit Null (20)
  • %H / %I — Stunde im 24/12-Stunden-Format
  • %M — Minute
  • %S — Sekunde
  • %A / %a — Wochentag ausgeschrieben / abgekürzt (Monday / Mon)
  • %B / %b — Monatsname ausgeschrieben / abgekürzt (April / Apr)
  • %p — AM/PM

Du musst sie nicht auswendig lernen; markier eine Referenz und schau nach, wenn du eine brauchst.

Parsen mit strptime

Die Gegenrichtung: einen String mit bekannter Form in ein datetime verwandeln:

main.py
Output
Click Run to see the output here.

Der Formatstring muss exakt zur Eingabe passen. Tut er das nicht, wirft strptime ValueError.

Für ISO-8601-Strings (den maschinenlesbaren Standard) gibt es in modernem Python eine einfachere Abkürzung:

main.py
Output
Click Run to see the output here.

Hast du mit zufälligen Formaten zu tun, hat das externe dateutil-Paket (pip install python-dateutil) ein nachsichtiges parser.parse(), das einen vernünftigen Tipp wagt.

Arithmetik mit timedelta

Um mit Daten zu rechnen, nimm timedelta für Differenz oder Offset:

main.py
Output
Click Run to see the output here.

Argumente für timedelta: days, seconds, microseconds, milliseconds, minutes, hours, weeks. Kein months oder years — Monate haben variable Länge. Für Monats-/Jahresmathematik nimm dateutil.relativedelta:

from dateutil.relativedelta import relativedelta
from datetime import date

today = date.today()
next_quarter = today + relativedelta(months=3)
print(next_quarter)

Zeitzonen: naiv vs. bewusst

Ein datetime ohne Zeitzoneninformation ist naiv — Python weiß nicht, welche Zeitzone es darstellt. Zeitmathematik mit naiven datetimes ist okay, solange du in einer logischen Zeitzone bleibst; die Probleme beginnen, sobald Daten aus verschiedenen Zonen aufeinandertreffen.

Ein bewusstes datetime trägt Zeitzoneninfo mit sich. Häng eine Zeitzone ausdrücklich an:

main.py
Output
Click Run to see the output here.

Python 3.9 hat das Modul zoneinfo für benannte Zeitzonen hinzugefügt (nutzt die IANA-Datenbank des Systems):

main.py
Output
Click Run to see the output here.

Zwischen Zonen wandelst du mit .astimezone() um:

main.py
Output
Click Run to see the output here.

Eine Regel zum Einprägen: speichere datetimes in UTC, wandle nur zur Anzeigezeit in lokale Zonen um. Diese eine Gewohnheit verhindert die meisten Zeitzonen-Bugs.

Timestamps

Ein Unix-Timestamp ist die Anzahl Sekunden seit dem 1.1.1970 UTC. Python wandelt das einfach um:

main.py
Output
Click Run to see the output here.

Timestamps sind nützlich für Vergleiche, Sortieren und die Zusammenarbeit mit anderen Systemen. Für menschenlesbare Ausgabe wandle erst zurück in ein datetime.

Messen, wie lange etwas dauert

Für schnelle Messungen subtrahier zwei datetimes:

main.py
Output
Click Run to see the output here.

Für ernstere Performance-Messung nimm time.perf_counter() — es hat Sub-Mikrosekunden-Auflösung und ist immun gegen Systemzeit-Änderungen. datetime.now() ist okay für Zahlen wie „wie lange dauerte dieser API-Aufruf“.

Muster, die du wiederverwenden wirst

main.py
Output
Click Run to see the output here.

Was du mitnimmst

  • date, datetime und timedelta decken 90 % der Fälle ab.
  • Nimm ISO-8601 für maschinenlesbar; strftime für menschenlesbar.
  • Speicher in UTC; wandle zur Anzeigezeit um.
  • Nimm zoneinfo für benannte Zeitzonen.
  • Für Monate und Jahre: dateutil.relativedelta.

Ein weiteres Werkzeug für deinen Praxis-Werkzeugkasten: reguläre Ausdrücke, als Nächstes.

Häufig gestellte Fragen

Wie bekomme ich das aktuelle Datum und die Uhrzeit in Python?

datetime.now() liefert das aktuelle lokale Datum mit Uhrzeit. datetime.utcnow() liefert UTC (die moderne Präferenz ist datetime.now(timezone.utc), da utcnow() ein naives datetime liefert). Für nur das Datum: date.today().

Wie formatiere ich ein Datum als String?

Nutz .strftime(format) mit Formatcodes wie %Y-%m-%d für Jahr-Monat-Tag. Beispiel: datetime.now().strftime('%Y-%m-%d %H:%M'). Um einen String zurück zu parsen: datetime.strptime(text, format) mit denselben Codes.

Wie addiere ich Tage zu einem Datum in Python?

Nutz timedelta: from datetime import date, timedelta; date.today() + timedelta(days=7). timedelta unterstützt Tage, Stunden, Minuten, Sekunden, Wochen und mehr. Für Monate und Jahre nimm dateutil.relativedeltatimedelta kennt keine Monate.

Lerne mit Coddy zu programmieren

LOS GEHT'S