Weiter zum Inhalt

Python datetime: So arbeitest du mit Datum und Uhrzeit in Python

Lerne die verschiedenen Möglichkeiten kennen, mit Pythons datetime-Tools zu arbeiten – und vereinfache alles vom String-Parsing bis zum Umgang mit zeitzonenbewussten Zeitstempeln.
Aktualisiert 18. Sept. 2026  · 2 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Mit Datum und Uhrzeit zu arbeiten wirkt simpel – bis Formatvarianten, Zeitzonen, Sommerzeitregeln oder Zeitstempel aus mehreren Systemen ins Spiel kommen. Spätestens dann sind rohe Strings oder Integer als Zeitangabe keine Option mehr. Pythons datetime-Modul hilft dir, all diese beweglichen Teile verlässlich zu handhaben.

Dieser Guide führt dich durch die Kernklassen, zeigt, wie du datetime-Objekte erstellst und nutzt, wie du damit rechnest, Werte formatierst und parst, Zeitzonen behandelst und mehr. Jede Sektion baut auf der vorherigen auf, damit du von den Basics zu fortgeschritteneren Mustern gelangst.

Kernklassen des Python-datetime-Moduls

Bevor es konkret wird, lohnt sich ein Blick auf das Konzept dahinter: Das datetime-Modul nutzt eine kleine Anzahl an Klassen, die jeweils einen Teilaspekt abdecken. Wenn du weißt, wofür welche Klasse gedacht ist, wird der Rest deutlich einfacher.

date

Wenn du nur ein Kalenderdatum ohne Uhrzeit oder Zeitzone brauchst, ist die Klasse date das Richtige. Sie speichert Jahr, Monat und Tag über vertraute Attribute.

Die Attribute sind:

  • year

  • month

  • day

Und die Methoden:

  • today()

  • fromisoformat()

  • replace()

  • isoformat()

  • weekday()

  • isoweekday()

from datetime import date
d = date(2025, 3, 1)
print(d)

Dieser Code erstellt ein einfaches Kalenderdatum. Wenn du eine ungültige Kombination eingibst (z. B. February 30), wirft Python einen ValueError.

time

Manche Aufgaben beziehen sich nur auf die Uhrzeit, etwa eine Erinnerung um 14:30 Uhr. Die Klasse time ist dafür hilfreich, denn sie speichert Stunden, Minuten, Sekunden und – falls nötig – Mikrosekunden oder Zeitzoneninformationen.

Die Attribute sind: hour, minute, second, microsecond, tzinfo

Die Methoden sind: replace(), isoformat()

from datetime import time
t = time(14, 30, 15)
print(t)

Das erzeugt eine Uhrzeit ohne Datum. Ungültige Werte (z. B. hour=27) führen zu einem Fehler.

datetime

Die meisten Praxisszenarien kombinieren Datum und Uhrzeit – hier kommt datetime ins Spiel. Es ist die vielseitigste Klasse im Modul und diejenige, die du für Logging, Verarbeitung und Koordination von Ereignissen am häufigsten verwenden wirst.

Die Attribute sind (zusätzlich zu den oben genannten): tzinfo

Und die Methoden sind now(), utcnow(), fromisoformat(), strptime(), strftime(), astimezone(). Außerdem unterstützt sie Arithmetik mit timedelta, darauf gehe ich gleich genauer ein.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Das erzeugt einen vollständigen Zeitstempel mit Datum und Uhrzeit.

timedelta

Immer wenn du verstrichene Zeit messen oder einen Zeitstempel verschieben willst, ist timedelta die richtige Wahl. Es repräsentiert eine Dauer, keinen konkreten Zeitpunkt.

Die Attribute sind: days, seconds, microseconds. Häufig genutzt für Offsets, Zeitdifferenzen und Planungslogik.

from datetime import timedelta
delta = timedelta(days=7, hours=3)
print(delta)

Das steht für eine feste Dauer. Besonders nützlich wird es, wenn du es zu einem datetime addierst oder davon subtrahierst.

tzinfo

tzinfo definiert Pythons Schnittstelle für Zeitzonen. Du erzeugst solche Objekte selten direkt, aber das datetime-System nutzt sie, sobald du Zeitzonen setzt oder konvertierst.

timezone

timezone ist eine eingebaute tzinfo-Implementierung für feste UTC-Offsets wie UTC oder UTC+1. Praktisch für einfache Fälle, in denen Sommerzeitregeln keine Rolle spielen.

Erstellen und Auslesen von Python-datetime-Objekten

Wenn die Klassen klar sind, geht es darum, Instanzen zu erzeugen. Python bietet mehrere Wege, je nachdem, woher deine Daten stammen: manuelle Eingabe, Systemzeit, Timestamps oder Text.

Konstruktoren verwenden

Konstruktoren geben dir die volle Kontrolle über die zu erstellenden Werte. Das ist oft der expliziteste und fehlertoleranteste Weg, um date-, time- oder datetime-Objekte zu bauen.

from datetime import date
d = date(2025, 3, 1)
print(d)

Das erzeugt direkt ein Kalenderdatum. Ungültige Werte lösen sofort einen Fehler aus und helfen, Fehler früh zu finden.

from datetime import time
t = time(14, 30, 15)
print(t)

Das liefert eine Uhrzeit. Nutze das, wenn du kein Datum brauchst.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Das erstellt einen vollständigen Zeitstempel. Mit einem tzinfo-Argument wird er zeitzonenbewusst.

Aus Timestamps erstellen

Unix-Zeitstempel tauchen in Logs, APIs und Betriebssystemen auf. Python wandelt sie leicht in menschenlesbare datetime-Objekte um.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Die erste Variante interpretiert den Zeitstempel in Lokalzeit, die zweite in UTC.

Klassenmethoden für aktuelle Werte

Wenn du das aktuelle Datum oder die aktuelle Uhrzeit brauchst, stellt Python einfache Helfer bereit. Unverzichtbar für Logging, Event-Tracking und Echtzeit-Pipelines.

from datetime import datetime, date, timezone
print(date.today())
print(datetime.now())
print(datetime.now(tz=timezone.utc))  # Python 3.12+ bevorzugt

Damit erhältst du die aktuelle Systemzeit – je nach Bedarf in Lokalzeit oder UTC.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Das wandelt Epoch-Zeitstempel in datetime-Objekte um. Sehr gängig beim Parsen von API- oder Datenbankwerten.

Aus Strings parsen

In echten Datensätzen werden Zeitstempel oft als Text gespeichert. Python bietet verlässliche Werkzeuge, um diese Strings in strukturierte Werte zu überführen.

strptime()
from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

strptime() parst einen String anhand eines Formatmusters. Passt der String nicht exakt, wirft Python ValueError.

from datetime import datetime
dt = datetime.strptime("not-a-date", "%Y-%m-%d")

Das schlägt fehl, weil die Eingabe nicht zum erwarteten Muster passt.

fromisoformat()
datetime.fromisoformat("2025-03-01T14:30:00")

ISO-8601-Strings lassen sich sauber parsen, weil die Struktur standardisiert ist. Das ist oft der einfachste Weg, Zeitstempel aus APIs oder modernen Datenpipelines zu laden.

Mit Datum und Uhrzeit rechnen

Sobald du Zeitstempel erstellen kannst, willst du mit ihnen arbeiten: Dauern berechnen, Daten verschieben oder Intervalle vergleichen.

timedelta für zeitliche Berechnungen

timedelta modelliert Zeitspannen fester Länge wie „5 Stunden“ oder „2 Wochen“. Das ist nützlich für Scheduling, Logging oder einfache Countdowns.

from datetime import datetime, timedelta
dt = datetime(2025, 3, 1, 14, 30)
new_dt = dt + timedelta(days=5)
print(new_dt)

Dieses Beispiel verschiebt den Zeitstempel um fünf Tage nach vorn.

start = datetime(2025, 3, 1, 9, 0)
end = datetime(2025, 3, 1, 14, 30)
duration = end - start
print(duration.total_seconds())

Die Differenz zweier datetime-Objekte ergibt ein timedelta, das du in Sekunden, Tage oder Stunden umrechnen kannst.

Feste Dauer vs. kalenderbewusste Arithmetik

Nicht alle Zeiteinheiten sind gleich: Monate sind unterschiedlich lang, Jahre können Schalttage enthalten, und Monatsenden verhalten sich speziell. Für solche Fälle reicht timedelta nicht aus.

dateutil.relativedelta übernimmt „kalenderbewusste“ Arithmetik:

from dateutil.relativedelta import relativedelta
from datetime import date
d = date(2025, 1, 31)
print(d + relativedelta(months=1))

Das behandelt den fehlenden „31. Februar“ korrekt, indem das Datum passend verschoben wird.

Datumsangaben formatieren und parsen

Formatierung ist allgegenwärtig: APIs erwarten bestimmte Formate, Nutzer bevorzugen lesbaren Text, und Logs brauchen konsistente Zeitstempel-Strings. Python unterstützt sowohl flexible Formatierung als auch standardisierte Darstellungen.

String-Formatierung mit strftime

strftime() wandelt datetime-Objekte mithilfe vordefinierter Codes in formatierte Strings.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt.strftime("%A, %B %d, %Y at %H:%M"))

Das gibt einen gut lesbaren String mit Wochentag und vollem Monatsnamen aus.

dt.strftime("%Y-%m-%dT%H:%M:%S")

Das erzeugt einen ISO-ähnlichen String, geeignet für Datenspeicherung oder APIs.

Strings mit strptime parsen

from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

Das wandelt Text in ein datetime-Objekt. Jegliche Abweichung zwischen String und Muster führt zu einem Fehler.

Mit ISO 8601 und RFC 3339 arbeiten

ISO 8601 löst die Mehrdeutigkeiten vieler regionaler Datumsformate. Python unterstützt es direkt:

from datetime import datetime
dt = datetime.fromisoformat("2025-03-01T14:30:00")
print(dt.isoformat())

Das ist das sicherste Format für den Austausch zwischen Systemen, APIs oder Datenbanken.

Mit Zeitzonen umgehen

Zeitzonen gehören zu den kniffligsten Themen in der Zeitverarbeitung. Python unterscheidet zwischen naiven und bewussten datetime-Objekten und bietet Werkzeuge für reale Zonenszenarien.

Naive vs. bewusste datetime-Objekte

Ein naives datetime hat keine Zeitzone:

from datetime import datetime
naive_dt = datetime(2025, 3, 1, 14, 30)
print(naive_dt.tzinfo)  # None

Ein bewusstes datetime enthält einen Zeitzonenoffset:

from datetime import timezone, timedelta
aware_dt = naive_dt.replace(tzinfo=timezone(timedelta(hours=1)))
print(aware_dt)

Das Vermischen von naiven und bewussten Werten bei Vergleichen oder in Berechnungen führt in der Regel zu Fehlern.

Das zoneinfo-Modul verwenden

Pythons zoneinfo-Modul bietet Zugriff auf echte IANA-Zeitzonen:

from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30, tzinfo=ZoneInfo("Europe/Paris"))
print(dt)

Zeitzonenumrechnung ist einfach:

dt.astimezone(ZoneInfo("America/New_York"))

So drückst du denselben Zeitpunkt in einer anderen lokalen Zeitzone aus.

Zwischen Zeitzonen konvertieren

Du kannst jeden bewussten Zeitstempel mit astimezone() in eine andere Zone umwandeln:

from zoneinfo import ZoneInfo
dt_ny = dt.astimezone(ZoneInfo("America/New_York"))
print(dt_ny)

Ein gängiger Best Practice ist, Zeitstempel in UTC zu speichern und nur für die Anzeige zu konvertieren.

Daten vergleichen und filtern

Vergleiche tauchen in fast jedem Workflow auf: Sortieren von Logs, Filtern von Events oder die Frage, ob etwas vor oder nach einer Schwelle passiert ist.

from datetime import datetime
a = datetime(2025, 3, 1, 12, 0)
b = datetime(2025, 3, 1, 15, 0)
print(a < b)  # True

Zeitzonenbewusste Vergleiche berücksichtigen Offsets:

from datetime import datetime
from zoneinfo import ZoneInfo
dt1 = datetime(2025, 3, 1, 12, 0, tzinfo=ZoneInfo("Europe/London"))
dt2 = datetime(2025, 3, 1, 7, 0, tzinfo=ZoneInfo("America/New_York"))
print(dt1 == dt2)  # True — derselbe Zeitpunkt

Sammlungen zu filtern funktioniert ganz natürlich:

dates = [
    datetime(2025, 3, 1, 10),
    datetime(2025, 2, 20, 9),
    datetime(2025, 3, 1, 8)
]
cutoff = datetime(2025, 3, 1)
filtered = [d for d in dates if d >= cutoff]
print(filtered)

Eine Normalisierung auf UTC ist hilfreich, wenn du über Zeitzonen hinweg arbeitest.

Weitere fortgeschrittene Anwendungsfälle

datetime begegnet dir in vielen Workflows über simples Parsing und Rechnen hinaus. Hier sind ein paar Muster, die häufig vorkommen.

Unix-Zeitstempel

Unix-Zeitstempel messen Sekunden seit dem 1. Januar 1970 (UTC). Sie sind in Systemprogrammierung und APIs weit verbreitet.

from datetime import datetime
dt = datetime.fromtimestamp(1700000000)
print(dt)

Millisekunden und Mikrosekunden müssen skaliert werden:

ts_ms = 1700000000000
dt_ms = datetime.fromtimestamp(ts_ms / 1000)

ts_us = 1700000000000000
dt_us = datetime.fromtimestamp(ts_us / 1_000_000)

Scheduling und Timer

Libraries wie schedule stützen sich auf datetime-Werte, um festzulegen, wann Tasks laufen. Ob du Funktionen alle paar Sekunden triggerst oder ein einmaliges Event später am Tag planst – datetime bildet die Grundlage dieser Vergleiche.

Datenanalyse-Muster

Häufig werden datetime-Attribute für Gruppierungen und zeitbasierte Analysen extrahiert:

dt = datetime(2025, 3, 1, 14, 30)
print(dt.year)
print(dt.isocalendar())

In pandas ist Resampling nach Perioden extrem verbreitet:

import pandas as pd
df = pd.DataFrame({
    "value": [10, 12, 15],
    "timestamp": pd.to_datetime([
        "2025-03-01",
        "2025-03-02",
        "2025-03-08"
    ])
}).set_index("timestamp")

print(df.resample("W").sum())

Fazit

Wenn du mehr über datetime lernen möchtest, schau dir dieses Video aus unserem Kurs Working with Dates and Times in Python von Max Shrom und Data Types for Data Science in Python von Jason Myers an. 

Nützlich ist auch unser Tutorial Converting Strings to Dates as datetime Objects, falls du zusätzliche Hilfe beim Konvertieren von Strings brauchst.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Technischer Redakteur, der sich auf KI, ML und Datenwissenschaft spezialisiert hat und komplexe Ideen verständlich und nachvollziehbar macht.

Themen
Python

Lerne Python mit DataCamp

Kurs

Einführung in Python

4 Std.
7M
Lerne in nur vier Stunden die Grundlagen der Datenanalyse mit Python und entdecke beliebte Python-Pakete.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Python Datenstrukturen Tutorial

Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Sejal Jaiswal's photo

Sejal Jaiswal

24 Min.

Tutorial

Python-Tutorial zum Verknüpfen von Zeichenfolgen

Lerne verschiedene Methoden zum Verknüpfen von Zeichenfolgen in Python kennen, mit Beispielen, die jede Technik zeigen.
DataCamp Team's photo

DataCamp Team

5 Min.

Tutorial

Python JSON-Daten: Ein Leitfaden mit Beispielen

Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Moez Ali's photo

Moez Ali

6 Min.

Tutorial

Auf 2 Dezimalstellen runden in Python: 7 Methoden erklärt

Lerne, wie du Zahlen in Python mit round(), f-Strings, format(), dem decimal-Modul, NumPy und mehr auf zwei Dezimalstellen rundest — inklusive Vergleichstabelle der Methoden.
Allan Ouko's photo

Allan Ouko

7 Min.

Tutorial

Python-Arrays

Python-Arrays mit Code-Beispielen. Lerne noch heute, wie du mit Python NumPy Arrays erstellen und ausdrucken kannst!
DataCamp Team's photo

DataCamp Team

3 Min.

Tutorial

Python-Listenfunktionen und -Methoden – Tutorial und Beispiele

Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Abid Ali Awan's photo

Abid Ali Awan

7 Min.

Mehr AnzeigenMehr Anzeigen