Kurz: 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?
Teil des Kurses Python
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))Ausgabe:
2025-12-24
2025 12 24
2
2025-03-08 14:30:15
14 30
Truedate.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)Ausgabe:
08.03.2025
14:30 Uhr
2025-03-08T14:30:00
2025 18
6Rechnen 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")Ausgabe:
2025-04-07
2025-02-22
291 Tage bis Weihnachten
8:30:00 8.5 StundenSchaltjahre 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])Ausgabe:
True False
(3, 29)
March MondayZeitzonen
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())Ausgabe:
2025-07-01T12:00:00+00:00
2025-07-01T14:00:00+02:00Tipp
Speichere Zeitpunkte intern am besten in UTC und rechne sie erst zur Anzeige in die Ortszeit um.
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)Ausgabe:
499999500000 TrueMerke
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
Übungsaufgabe
Berechne, wie viele Tage du schon lebst, und bestimme den Wochentag deines Geburtstags in diesem Jahr.
Quiz zur Selbstkontrolle
Welche Klasse beschreibt eine Zeitspanne wie "30 Tage"?
- timedelta (richtig)
- date
- interval
- duration
Was macht strptime?
- Es liest einen Text und macht ein datetime daraus (richtig)
- Es formatiert ein datetime als Text
- Es zählt Tage
- Es bestimmt die Zeitzone
Welches Format entspricht dem Datum 08.03.2025?
- %d.%m.%Y (richtig)
- %Y.%d.%m
- %D-%M-%y
- %m/%d/%Y
Weiter im Kurs
Zurück: JSON und CSV
Weiter: Reguläre Ausdrücke
Alle Kapitel: Python im Überblick