Datetime in Python: Datum und Uhrzeit verwalten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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.

Blogs

Buchempfehlungen