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.
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:
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:
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:
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:
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:
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:
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:
Python 3.9 hat das Modul zoneinfo für benannte Zeitzonen hinzugefügt (nutzt die IANA-Datenbank des Systems):
Zwischen Zonen wandelst du mit .astimezone() um:
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:
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:
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
Was du mitnimmst
date,datetimeundtimedeltadecken 90 % der Fälle ab.- Nimm ISO-8601 für maschinenlesbar;
strftimefür menschenlesbar. - Speicher in UTC; wandle zur Anzeigezeit um.
- Nimm
zoneinfofü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.relativedelta — timedelta kennt keine Monate.