Das Modul datetime in Python bietet leistungsstarke Werkzeuge für die Arbeit mit Datums- und Zeitangaben. Diese Bibliothek ist unverzichtbar für die Erstellung von Berichten, Analysen, die Planung von Ereignissen und die Verarbeitung von Zeitstempeln in allen Softwareprojekten.
Grundlagen der Arbeit mit dem datetime-Modul
Import und Hauptklassen
Das datetime-Modul ist Teil der Python-Standardbibliothek und muss nicht zusätzlich installiert werden:
import datetime
from datetime import date, time, datetime, timedelta, timezone
Die Hauptklassen des Moduls:
- datetime.date — Arbeit mit Daten (Jahr, Monat, Tag)
- datetime.time — Arbeit mit Uhrzeiten (Stunden, Minuten, Sekunden)
- datetime.datetime — Kombiniert Datum und Uhrzeit
- datetime.timedelta — Stellt die Differenz zwischen Daten/Zeiten dar
- datetime.timezone — Arbeit mit Zeitzonen
Aktuelles Datum und Uhrzeit abrufen
from datetime import datetime, date
# Aktuelles Datum und Uhrzeit
now = datetime.now()
print(f"Aktuelles Datum und Uhrzeit: {now}")
# Nur das aktuelle Datum
today = date.today()
print(f"Heutiges Datum: {today}")
Erstellen und Arbeiten mit Daten
Daten manuell erstellen
from datetime import date, datetime
# Erstellen eines bestimmten Datums
custom_date = date(2025, 5, 9)
print(f"Festgelegtes Datum: {custom_date}")
# Erstellen von Datum und Uhrzeit
custom_datetime = datetime(2025, 5, 9, 14, 30, 45)
print(f"Festgelegtes Datum und Uhrzeit: {custom_datetime}")
Datumsbestandteile extrahieren
today = date.today()
print(f"Jahr: {today.year}")
print(f"Monat: {today.month}")
print(f"Tag: {today.day}")
print(f"Wochentag: {today.weekday()}") # 0 = Montag, 6 = Sonntag
Arbeiten mit Uhrzeiten
Erstellen und Arbeiten mit Zeitobjekten
from datetime import time
# Erstellen einer Uhrzeit
custom_time = time(14, 30, 45)
print(f"Festgelegte Uhrzeit: {custom_time}")
# Zeitbestandteile extrahieren
print(f"Stunden: {custom_time.hour}")
print(f"Minuten: {custom_time.minute}")
print(f"Sekunden: {custom_time.second}")
Uhrzeit mit Mikrosekunden abrufen
from datetime import datetime
now = datetime.now()
print(f"Uhrzeit mit Mikrosekunden: {now}")
print(f"Mikrosekunden: {now.microsecond}")
Arithmetische Operationen mit Daten
Verwendung von timedelta
from datetime import date, datetime, timedelta
# Operationen mit Daten
today = date.today()
tomorrow = today + timedelta(days=1)
last_week = today - timedelta(weeks=1)
next_month = today + timedelta(days=30)
print(f"Morgen: {tomorrow}")
print(f"Letzte Woche: {last_week}")
print(f"Nächster Monat: {next_month}")
# Komplexere Operationen
future_date = today + timedelta(days=100, hours=5, minutes=30)
print(f"In 100 Tagen, 5 Stunden und 30 Minuten: {future_date}")
Differenz zwischen Daten berechnen
from datetime import date, datetime
start_date = date(2025, 1, 1)
end_date = date(2025, 12, 31)
# Differenz in Tagen
difference = end_date - start_date
print(f"Differenz in Tagen: {difference.days}")
# Differenz in Sekunden für datetime
start_time = datetime(2025, 5, 9, 10, 0, 0)
end_time = datetime(2025, 5, 9, 15, 30, 45)
time_diff = end_time - start_time
print(f"Differenz in Sekunden: {time_diff.total_seconds()}")
print(f"Differenz in Stunden: {time_diff.total_seconds() / 3600}")
Formatieren von Datum und Uhrzeit
Die strftime-Methode
from datetime import datetime
now = datetime.now()
# Verschiedene Formate
print(now.strftime("%d.%m.%Y")) # 09.05.2025
print(now.strftime("%d. %B %Y")) # 9. Mai 2025
print(now.strftime("%H:%M:%S")) # 14:30:45
print(now.strftime("%A, %d. %B %Y %H:%M")) # Freitag, 9. Mai 2025 14:30
Datum aus einem String parsen (strptime)
from datetime import datetime
# String in ein datetime-Objekt umwandeln
date_string = "09.05.2025 14:30:45"
parsed_date = datetime.strptime(date_string, "%d.%m.%Y %H:%M:%S")
print(f"Geparstes Datum: {parsed_date}")
# Mit Monatsnamen
date_string2 = "9. Mai 2025"
parsed_date2 = datetime.strptime(date_string2, "%d. %B %Y")
print(f"Geparstes Datum: {parsed_date2}")
Arbeiten mit Zeitzonen
Zeitzonenbewusste Datumsobjekte
from datetime import datetime, timezone, timedelta
# Aktuelle UTC-Zeit
utc_now = datetime.now(timezone.utc)
print(f"UTC-Zeit: {utc_now}")
# Erstellen einer benutzerdefinierten Zeitzone
berlin_tz = timezone(timedelta(hours=2)) # MEZ (Sommerzeit)
berlin_time = datetime.now(berlin_tz)
print(f"Berliner Zeit: {berlin_time}")
# Zeitzonenumrechnung
ny_tz = timezone(timedelta(hours=-4)) # EDT (Sommerzeit)
ny_time = utc_now.astimezone(ny_tz)
print(f"New Yorker Zeit: {ny_time}")
Verwendung der pytz-Bibliothek (für erweiterte Zeitzonen)
# Zuerst installieren: pip install pytz
from datetime import datetime
import pytz
# Zeitzonen mit pytz
berlin = pytz.timezone('Europe/Berlin')
berlin_time = datetime.now(berlin)
print(f"Berliner Zeit mit pytz: {berlin_time}")
# Zeitzonenumrechnung mit pytz
ny = pytz.timezone('America/New_York')
ny_time = berlin_time.astimezone(ny)
print(f"New Yorker Zeit mit pytz: {ny_time}")
Praktische Beispiele
Alter einer Person berechnen
from datetime import date
def calculate_age(birth_date):
today = date.today()
age = today.year - birth_date.year
# Überprüfen, ob der Geburtstag in diesem Jahr bereits war
if (today.month, today.day) < (birth_date.month, birth_date.day):
age -= 1
return age
birthday = date(1990, 5, 15)
print(f"Alter: {calculate_age(birthday)} Jahre")
Einfacher Aufgabenplaner
from datetime import datetime, timedelta
def schedule_task(start_time, delay_hours):
return start_time + timedelta(hours=delay_hours)
start = datetime(2025, 5, 9, 10, 0, 0)
task_time = schedule_task(start, 3)
print(f"Aufgabe geplant für: {task_time}")
Datumsvalidierung
from datetime import datetime
def validate_date(date_string, format="%d.%m.%Y"):
try:
datetime.strptime(date_string, format)
return True
except ValueError:
return False
print(validate_date("09.05.2025")) # True
print(validate_date("32.13.2025")) # False
Häufige Fehler und Best Practices
- Zeitzonen ignorieren: Verwende immer zeitzonenbewusste Objekte, wenn du mit globalen Daten arbeitest.
- Falsches Format bei strptime: Stelle sicher, dass das Format exakt zum String passt.
- timedelta mit Monaten: timedelta unterstützt keine Monate direkt; verwende dateutil.relativedelta für monatsbasierte Berechnungen.
- Speicherung: Speichere Daten immer im UTC-Format und konvertiere sie nur für die Anzeige.
Fazit
Das datetime-Modul in Python ist ein unverzichtbares Werkzeug für jeden Entwickler. Mit den hier gezeigten Techniken kannst du Datums- und Zeitangaben effizient erstellen, formatieren, parsen und berechnen. Übe mit den Beispielen und integriere sie in deine Projekte, um deine Python-Kenntnisse zu vertiefen.