Mit dem Modul datetime rechnest du mit Datum und Uhrzeit: Wie viele Tage sind es bis zum Geburtstag? Welcher Wochentag ist der 24. Dezember? Wie formatiere ich ein Datum?
Die wichtigsten Klassen
| Klasse | Inhalt |
|---|---|
date | Datum (Jahr, Monat, Tag) |
time | Uhrzeit (Stunde, Minute, Sekunde) |
datetime | Datum und Uhrzeit zusammen |
timedelta | Zeitspanne (Tage, Sekunden, ...) |
Datum erzeugen
from datetime import date, datetime
d = date(2025, 12, 24)
print(d)
print(d.year, d.month, d.day)
print(d.weekday()) # Montag = 0 ... Sonntag = 6
moment = datetime(2025, 3, 8, 14, 30, 15)
print(moment)
print(moment.hour, moment.minute)
print(date.today() >= date(2020, 1, 1))2025-12-24 2025 12 24 2 2025-03-08 14:30:15 14 30 True
date.today() und datetime.now() liefern den aktuellen Zeitpunkt; die Ausgabe ändert sich natürlich jeden Tag.
Formatieren und einlesen
Mit strftime machst du aus einem Datum einen Text, mit strptime umgekehrt:
| Kürzel | Bedeutung | Beispiel |
|---|---|---|
%d | Tag | 08 |
%m | Monat (Zahl) | 03 |
%Y | Jahr (4-stellig) | 2025 |
%H %M %S | Stunde, Minute, Sekunde | 14:30:15 |
%A | Wochentag (Name) | Samstag |
%B | Monatsname | März |
Die Namen von Wochentagen und Monaten hängen von der Systemsprache ab.
from datetime import datetime
m = datetime(2025, 3, 8, 14, 30)
print(m.strftime("%d.%m.%Y"))
print(m.strftime("%H:%M Uhr"))
print(m.isoformat())
eingelesen = datetime.strptime("24.12.2025 18:00", "%d.%m.%Y %H:%M")
print(eingelesen.year, eingelesen.hour)
print(datetime.fromisoformat("2025-06-01T09:15:00").month)08.03.2025 14:30 Uhr 2025-03-08T14:30:00 2025 18 6
Rechnen mit timedelta
Ein timedelta ist eine Zeitspanne. Du kannst sie addieren, subtrahieren und aus der Differenz zweier Daten gewinnen:
from datetime import date, datetime, timedelta
heute = date(2025, 3, 8)
print(heute + timedelta(days=30))
print(heute - timedelta(weeks=2))
weihnachten = date(2025, 12, 24)
rest = weihnachten - heute
print(rest.days, "Tage bis Weihnachten")
dauer = datetime(2025, 3, 8, 18, 0) - datetime(2025, 3, 8, 9, 30)
print(dauer, dauer.total_seconds() / 3600, "Stunden")2025-04-07 2025-02-22 291 Tage bis Weihnachten 8:30:00 8.5 Stunden
Schaltjahre und Monatslängen
import calendar
print(calendar.isleap(2024), calendar.isleap(2100))
print(calendar.monthrange(2024, 2)) # (Wochentag des 1., Anzahl Tage)
print(calendar.month_name[3], calendar.day_name[0])True False (3, 29) March Monday
Zeitzonen
Ein datetime ohne Zeitzone nennt man naiv. Für korrektes Arbeiten über Zeitzonen hinweg gibt es das Modul zoneinfo:
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2025, 7, 1, 12, 0, tzinfo=ZoneInfo("UTC"))
berlin = utc.astimezone(ZoneInfo("Europe/Berlin"))
print(utc.isoformat())
print(berlin.isoformat())2025-07-01T12:00:00+00:00 2025-07-01T14:00:00+02:00
Messen, wie lange etwas dauert
import time
start = time.perf_counter()
summe = sum(range(1_000_000))
dauer = time.perf_counter() - start
print(summe, dauer < 5)499999500000 True
Merke
date,time,datetimeundtimedeltastammen ausdatetimestrftimeformatiert,strptimeliest;isoformat()liefert das ISO-Format- Differenzen zweier Daten sind
timedelta-Objekte (.days,.total_seconds()) calendarkennt Schaltjahre und Monatslängenzoneinfo.ZoneInfofür Zeitzonen; intern UTC speichern
Aufgabe
Berechne, wie viele Tage du schon lebst, und bestimme den Wochentag deines Geburtstags in diesem Jahr.