W3docs

Das Python datetime-Modul verstehen

Datumsangaben und Zeiten in Python mit dem datetime-Modul verarbeiten: date, time, datetime, timedelta, strftime, strptime und Zeitzonen.

Python besitzt keinen dedizierten eingebauten Datumstyp. Stattdessen bietet das datetime-Modul der Standardbibliothek ein vollständiges Werkzeugset zum Erstellen, Bearbeiten, Formatieren und Parsen von Datums- und Zeitangaben. Dieses Kapitel behandelt alle zentralen Klassen — date, time, datetime, timedelta und timezone — und zeigt praktische Muster, die Sie regelmäßig verwenden werden.

Das Modul importieren

Das datetime-Modul ist Teil der Standardbibliothek und erfordert keine Installation. Sie können es auf zwei gängige Weisen importieren:

# Import the module and qualify every name
import datetime
today = datetime.date.today()

# Import specific classes directly
from datetime import date, time, datetime, timedelta, timezone
today = date.today()

Der from datetime import ...-Stil ist in der Praxis kürzer und wird in diesem Kapitel durchgehend verwendet.

Die date-Klasse

date repräsentiert ein Kalenderdatum (Jahr, Monat, Tag) ohne Tageszeit-Komponente.

date-Objekte erstellen

python— editable, runs on the server

Auf Datumsattribute zugreifen

Wenn Sie ein date-Objekt haben, können Sie dessen Jahr, Monat und Tag als Integer-Attribute auslesen und abfragen, auf welchen Wochentag es fällt:

from datetime import date

d = date(2024, 6, 15)
print(d.year)          # 2024
print(d.month)         # 6
print(d.day)           # 15

# weekday(): Monday = 0, Sunday = 6
print(d.weekday())     # 5  (Saturday)

# isoweekday(): Monday = 1, Sunday = 7
print(d.isoweekday())  # 6  (Saturday)

Die time-Klasse

time repräsentiert eine Tageszeit (Stunde, Minute, Sekunde, Mikrosekunde) unabhängig von einem bestimmten Datum.

from datetime import time

# time(hour, minute, second)  — all arguments optional, default to 0
t = time(14, 30, 0)
print(t)              # 14:30:00
print(t.hour)         # 14
print(t.minute)       # 30
print(t.second)       # 0

Die time-Klasse ist besonders nützlich, wenn Sie Uhrzeiten speichern oder vergleichen möchten, ohne das Datum zu berücksichtigen — zum Beispiel „Erinnere mich täglich um 09:00 Uhr."

Die datetime-Klasse

datetime ist die Hauptklasse. Sie kombiniert ein vollständiges Datum und eine Tageszeit in einem Objekt und ist das, was Sie in den meisten realen Programmen verwenden werden.

Aktuelles Datum und aktuelle Uhrzeit abrufen

from datetime import datetime

# Local system time (naive — no time zone)
now = datetime.now()
print(now)            # e.g. 2024-06-15 14:30:45.123456

# UTC time
utc_now = datetime.utcnow()
print(utc_now)        # e.g. 2024-06-15 18:30:45.123456

datetime-Objekte erstellen

from datetime import datetime, date, time

# Constructor: datetime(year, month, day, hour=0, minute=0, second=0)
dt = datetime(2024, 6, 15, 14, 30, 45)
print(dt)             # 2024-06-15 14:30:45

# From an ISO 8601 string
dt2 = datetime.fromisoformat("2024-06-15T14:30:45")
print(dt2)            # 2024-06-15 14:30:45

# Combine a date and a time object
combined = datetime.combine(date(2024, 6, 15), time(14, 30, 0))
print(combined)       # 2024-06-15 14:30:00

Auf datetime-Attribute zugreifen

datetime stellt alle Attribute von date und time bereit:

from datetime import datetime

dt = datetime(2024, 6, 15, 14, 30, 45)
print(dt.year)        # 2024
print(dt.month)       # 6
print(dt.day)         # 15
print(dt.hour)        # 14
print(dt.minute)      # 30
print(dt.second)      # 45

# Extract just the date or time part
print(dt.date())      # 2024-06-15
print(dt.time())      # 14:30:45

Die timedelta-Klasse

timedelta repräsentiert eine Zeitspanne — die Differenz zwischen zwei Zeitpunkten. Sie wird verwendet, um Zeitspannen zu date- und datetime-Objekten zu addieren oder zu subtrahieren.

timedelta erstellen und verwenden

from datetime import date, timedelta

today = date(2024, 6, 15)

# Add 30 days
future = today + timedelta(days=30)
print(future)         # 2024-07-15

# Subtract 7 days
last_week = today - timedelta(weeks=1)
print(last_week)      # 2024-06-08

# timedelta can express days, seconds, and microseconds
# Convenience arguments: days, seconds, microseconds, milliseconds, minutes, hours, weeks
delta = timedelta(hours=2, minutes=30)
print(delta)          # 2:30:00

Die Differenz zwischen zwei Datumsangaben berechnen

Das Subtrahieren eines date- oder datetime-Werts von einem anderen gibt ein timedelta zurück:

from datetime import date

start = date(2024, 1, 1)
end   = date(2024, 6, 15)

diff = end - start
print(diff)           # 166 days, 0:00:00
print(diff.days)      # 166

Dies ist der Standardweg, um die Anzahl der Tage zwischen zwei Datumsangaben zu berechnen. Verwenden Sie .total_seconds() auf einem timedelta, wenn Sie die Zeitspanne in Sekunden benötigen.

Datums- und Zeitangaben formatieren (strftime)

strftime ("string format time") wandelt ein date- oder datetime-Objekt in eine lesbare Zeichenkette um. Sie übergeben einen Formatstring, der Direktiven enthält, die mit % beginnen.

from datetime import datetime

dt = datetime(2024, 6, 15, 14, 30, 45)

print(dt.strftime("%Y-%m-%d"))               # 2024-06-15
print(dt.strftime("%d/%m/%Y"))               # 15/06/2024
print(dt.strftime("%A, %B %d, %Y"))          # Saturday, June 15, 2024
print(dt.strftime("%I:%M %p"))               # 02:30 PM
print(dt.strftime("%Y-%m-%d %H:%M:%S"))      # 2024-06-15 14:30:45

Häufige strftime-Direktiven

DirektiveBedeutungBeispiel
%Y4-stelliges Jahr2024
%y2-stelliges Jahr24
%mMonat als nullaufgefüllte Zahl06
%BVollständiger MonatsnameJune
%bAbgekürzter MonatsnameJun
%dTag des Monats, nullaufgefüllt15
%AVollständiger WochentagsnameSaturday
%aAbgekürzter WochentagsnameSat
%HStunde (24-Stunden-Format)14
%IStunde (12-Stunden-Format)02
%MMinute30
%SSekunde45
%pAM oder PMPM
%jTag des Jahres167
%WWochennummer des Jahres24

Datums- und Zeitangaben parsen (strptime)

strptime ("string parse time") ist das Gegenteil von strftime: Es wandelt eine Zeichenkette in ein datetime-Objekt um. Sie müssen einen Formatstring angeben, der zur Eingabe passt.

python— editable, runs on the server

Ein häufiger Stolperstein: strptime gibt immer ein datetime zurück, selbst wenn die Zeichenkette nur ein Datum enthält. Rufen Sie .date() auf dem Ergebnis auf, wenn Sie ein einfaches date-Objekt benötigen.

ISO-8601-Format

Der ISO-8601-Standard (YYYY-MM-DDTHH:MM:SS) ist der portabelste Weg, Datums- und Zeitwerte auszutauschen. Python bietet dafür eingebaute Hilfsfunktionen:

from datetime import datetime

dt = datetime(2024, 6, 15, 14, 30, 45)

# Produce ISO 8601 string
print(dt.isoformat())          # 2024-06-15T14:30:45

# Parse ISO 8601 string (Python 3.7+)
dt2 = datetime.fromisoformat("2024-06-15T14:30:45")
print(dt2)                     # 2024-06-15 14:30:45

Mit Zeitstempeln arbeiten

Ein Unix-Zeitstempel ist die Anzahl der Sekunden, die seit dem 1. Januar 1970 00:00:00 UTC vergangen sind. Python kann zwischen Zeitstempeln und datetime-Objekten konvertieren:

python— editable, runs on the server

Zeitzonen

Standardmäßig gibt datetime.now() ein naives Datetime zurück — es enthält keine Zeitzoneniformation. Das Hinzufügen eines tzinfo-Objekts macht es bewusst (aware). Bewusste Datetimes sind unerlässlich, wenn Ihr Programm Benutzer in mehreren Zeitzonen verwaltet oder Zeitstempel in einer Datenbank speichert.

Die eingebaute timezone verwenden

datetime.timezone stellt timezone.utc bereit und ermöglicht das Erstellen von Zonen mit festem Offset:

from datetime import datetime, timezone, timedelta

# Create an aware UTC datetime
utc_dt = datetime(2024, 6, 15, 14, 30, 45, tzinfo=timezone.utc)
print(utc_dt)                          # 2024-06-15 14:30:45+00:00

# Create a fixed +5:30 (India Standard Time) offset
ist_offset = timezone(timedelta(hours=5, minutes=30))
ist_dt = utc_dt.astimezone(ist_offset)
print(ist_dt)                          # 2024-06-15 20:00:45+05:30

zoneinfo verwenden (Python 3.9+)

Für echte IANA-Zeitzonen wie America/New_York oder Asia/Tokyo verwenden Sie das eingebaute zoneinfo-Modul (Python 3.9+). Es verarbeitet die Sommerzeit automatisch.

from datetime import datetime, timezone
from zoneinfo import ZoneInfo

# UTC aware datetime
utc_dt = datetime(2024, 6, 15, 14, 30, 45, tzinfo=timezone.utc)

# Convert to Eastern Time (handles DST automatically)
eastern = ZoneInfo("America/New_York")
eastern_dt = utc_dt.astimezone(eastern)
print(eastern_dt)      # 2024-06-15 10:30:45-04:00

# Convert to Tokyo time
tokyo = ZoneInfo("Asia/Tokyo")
tokyo_dt = utc_dt.astimezone(tokyo)
print(tokyo_dt)        # 2024-06-15 23:30:45+09:00

Auf Python 3.8 und früher installieren Sie die Drittanbieter-Bibliothek pytz für IANA-Zeitzonenunterstützung.

Komponenten ersetzen

replace() gibt ein neues Objekt zurück, bei dem bestimmte Felder geändert wurden. Das Original wird nie verändert.

from datetime import datetime

dt = datetime(2024, 6, 15, 14, 30, 45)

# Change only the year
dt2 = dt.replace(year=2025)
print(dt2)    # 2025-06-15 14:30:45

# Change hour and minute
dt3 = dt.replace(hour=9, minute=0, second=0)
print(dt3)    # 2024-06-15 09:00:00

Datums- und Zeitangaben vergleichen

date- und datetime-Objekte unterstützen alle standardmäßigen Vergleichsoperatoren:

from datetime import date

d1 = date(2024, 1, 1)
d2 = date(2024, 6, 15)

print(d1 < d2)    # True
print(d1 == d2)   # False

# Find the earliest date
earliest = min(d1, d2)
print(earliest)   # 2024-01-01

Vergleichen Sie ausschließlich bewusste Datetimes mit bewussten Datetimes und naive mit naiven — das Mischen führt zu einem TypeError.

Alles zusammenfügen

Hier ist ein praktisches Beispiel, das mehrere Konzepte kombiniert: Es berechnet, wie viele Tage bis zu einem zukünftigen Termin verbleiben, und formatiert beide Datumsangaben für die Ausgabe.

from datetime import date

deadline = date(2024, 12, 31)
today = date(2024, 6, 15)

days_left = (deadline - today).days
print(f"Today:    {today.strftime('%B %d, %Y')}")     # June 15, 2024
print(f"Deadline: {deadline.strftime('%B %d, %Y')}")  # December 31, 2024
print(f"Days remaining: {days_left}")                 # 199

Schnellreferenz

AufgabeCode
Heutiges Datumdate.today()
Aktuelles Datum und Uhrzeitdatetime.now()
Bestimmtes Datumdate(2024, 6, 15)
Datum aus Zeichenkettedatetime.strptime(s, fmt)
Datum in Zeichenkettedt.strftime(fmt)
ISO-Formatdt.isoformat() / datetime.fromisoformat(s)
Tage addieren/subtrahierend + timedelta(days=N)
Tage zwischen Datumsangaben(d2 - d1).days
Zeitzone konvertierendt.astimezone(ZoneInfo("Zone/Name"))

Übungen

Übung
What are the valid ways to create a date object in Python using the 'datetime' module according to the content from w3docs.com?
What are the valid ways to create a date object in Python using the 'datetime' module according to the content from w3docs.com?
Was this page helpful?