Python Datetime Modul

Das Datetime-Modul ermöglicht uns die Arbeit mit Datums- und Zeitobjekten. Es stellt drei zusätzliche Datentypen bereit: date, time und datetime.

import datetime

date()

datetime.date(year: int, month: int, day: int)

Die date-Methode gibt ein Datumsobjekt mit den Attributen year, month und day zurück:

from datetime import date
# Erstellen eines Datumsobjekts
obj = date(2022, 12, 1)
# Zugriff auf das Jahr-Attribut
obj.year
2022
obj.month
12
obj.day
1

time()

datetime.time(hour: int, minute: int, second: int)

Die time-Methode gibt ein Zeitobjekt mit den Attributen hour, minute, second, microsecond und tzinfo zurück:

from datetime import time
# Erstellen eines Zeitobjekts
obj = time(10, 20, 33)
# Zugriff auf das Stunden-Attribut
obj.hour
10
obj.second
33
obj.microsecond
0

datetime()

datetime.datetime(year, month, day, hour, minute, second)

datetime gibt ein Objekt zurück, das sowohl die Attribute von date als auch von time enthält:

from datetime import datetime
# Erstellen eines datetime-Objekts mit Datum und Uhrzeit
obj = datetime(2024, 12, 1, 15, 35, 59)
# Zugriff auf das Jahr-Attribut
obj.year
2024
obj.month
12
obj.day
1
obj.hour
15
obj.second
59

now() und today()

Die Methoden now und today geben ein datetime-Objekt mit dem exakten Systemdatum und der Systemzeit zurück:

from datetime import datetime
# Aktuelles Datum und Uhrzeit abrufen
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 19, 56, 49, 589806)

Da das zurückgegebene Objekt ein datetime ist, können wir sowohl auf die date- als auch auf die time-Attribute zugreifen:

now.date()
datetime.date(2022, 7, 23)
now.time()
datetime.time(19, 56, 49, 589806)
now.year
2022
now.month
7
now.day
23
now.hour
19
now.minute
56
now.second
49
now.microsecond
589806

Zusätzlich kann now ein Zeitzonen-Objekt als optionalen Parameter entgegennehmen:

from datetime import datetime, timezone
# Aktuelle UTC-Zeit abrufen
datetime.now(timezone.utc)
datetime.datetime(2022, 7, 24, 0, 20, 8, 265634, tzinfo=datetime.timezone.utc)

Wenn kein timezone-Parameter angegeben wird, verwendet now standardmäßig die Systemzeitzone.

strftime() und strptime()

Sie können einfach zwischen Strings und datetime-Objekten mit den Methoden strftime und strptime konvertieren.

strftime()

strftime ermöglicht es uns, menschenlesbare formatierte Strings aus einem Python datetime-Objekt zu erstellen:

from datetime import datetime
# Aktuelles Datum und Uhrzeit für Formatierungsbeispiele abrufen
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 20, 31, 19, 751479)
# Datum und Uhrzeit als Tag-Monat-Jahr mit abgekürztem Monat formatieren
now.strftime("%d-%b-%Y")
'23-Jul-2022'
# Datum und Uhrzeit als Tag-Monat-Jahr mit numerischem Monat formatieren
now.strftime("%d-%m-%Y")
'23-07-2022'
# Datum und Uhrzeit als Monat/Tag/Jahr formatieren
now.strftime("%m/%d/%Y")
'07/23/2022'
# Datum und Uhrzeit mit Datum und Uhrzeit formatieren
now.strftime("%b/%d/%Y - %H:%M:%S")
'Jul/23/2022 - 20:31:19'

Die an strftime übergebenen Strings mögen etwas seltsam erscheinen, aber es ist recht einfach, ihre Bedeutung zu verstehen. Zum Beispiel gibt %m/%d/%Y den Monat, den Tag und das Jahr getrennt durch / zurück (07/23/2022).

strptime()

Die Methode strptime erstellt ein datetime-Objekt aus einem String.

Diese Methode akzeptiert zwei Parameter:

obj.strptime(datetime_string, format)
  • Ein String, der ein datetime-Objekt darstellt.
  • Der Python-Formatcode, der diesem String entspricht.
from datetime import datetime

# String in datetime-Objekt parsen
datetime_str = '12-Jul-2023'
datetime.strptime(datetime_str, '%d-%b-%Y')
datetime.datetime(2023, 7, 12, 0, 0)
# String mit Datum und Uhrzeit parsen
datetime_str = 'Jul/12/2023 - 14:38:37'
datetime.strptime(datetime_str, "%b/%d/%Y - %H:%M:%S")
datetime.datetime(2023, 7, 12, 14, 38, 37)

Formatcodes

DirektiveBedeutungBeispiel
%aWochentag als lokalisierter abgekürzter Name.Sun, Mon, …, Sat (en_US)
%AWochentag als lokalisierter vollständiger Name.Sunday, Monday, …, Saturday (en_US)
%wWochentag als Dezimalzahl, wobei 0 Sonntag und 6 Samstag ist.0, 1, …, 6
%dTag des Monats als mit Null aufgefüllte Dezimalzahl.01, 02, …, 31
%bMonat als lokalisierter abgekürzter Name.Jan, Feb, …, Dec (en_US)
%BMonat als lokalisierter vollständiger Name.January, February, …, December (en_US)
%mMonat als mit Null aufgefüllte Dezimalzahl.01, 02, …, 12
%yJahr ohne Jahrhundert als mit Null aufgefüllte Dezimalzahl.00, 01, …, 99
%YJahr mit Jahrhundert als Dezimalzahl.0001, 0002, …, 2013, 2014, …, 9998, 9999
%HStunde (24-Stunden-Format) als mit Null aufgefüllte Dezimalzahl.00, 01, …, 23
%IStunde (12-Stunden-Format) als mit Null aufgefüllte Dezimalzahl.01, 02, …, 12
%pLokales Äquivalent von entweder AM oder PM.AM, PM (en_US)
%MMinute als mit Null aufgefüllte Dezimalzahl.00, 01, …, 59
%SSekunde als mit Null aufgefüllte Dezimalzahl.00, 01, …, 59
%fMikrosekunde als Dezimalzahl, links mit Nullen aufgefüllt.000000, 000001, …, 999999
%zUTC-Offset in der Form ±HHMM[SS[.ffffff]] (leerer String, wenn das Objekt naiv ist).(leer), +0000, -0400, +1030, +063415, -030712.345216
%ZZeitzonenname (leerer String, wenn das Objekt naiv ist).(leer), UTC, GMT
%jTag des Jahres als mit Null aufgefüllte Dezimalzahl.001, 002, …, 366
%UKalenderwochennummer des Jahres (Sonntag als erster Tag der Woche) als mit Null aufgefüllte Dezimalzahl. Alle Tage in einem neuen Jahr vor dem ersten Sonntag gelten als in Woche 0.00, 01, …, 53
%WKalenderwochennummer des Jahres (Montag als erster Tag der Woche) als Dezimalzahl. Alle Tage in einem neuen Jahr vor dem ersten Montag gelten als in Woche 0.00, 01, …, 53
%cLokal angemessene Datums- und Zeitdarstellung.Tue Aug 16 21:30:00 1988 (en_US)
%xLokal angemessene Datumsdarstellung.08/16/88 (None)
%XLokal angemessene Zeitdarstellung.21:30:00 (en_US)
%%Ein literales '%'-Zeichen.%

timedelta()

Das timedelta-Objekt repräsentiert die Differenz zwischen zwei Daten oder Zeiten.

from datetime import datetime

# Zwei datetime-Objekte erstellen
date_1 = datetime.strptime('12-Jul-2023', '%d-%b-%Y')
date_2 = datetime.strptime('01-Jan-2024', '%d-%b-%Y')

# Differenz berechnen (gibt timedelta zurück)
difference = date_2 - date_1
difference
datetime.timedelta(days=173)
# Anzahl der Tage aus timedelta abrufen
difference.days
173

timedelta kann days, seconds und microseconds zu einem datetime-Objekt hinzufügen:

from datetime import datetime, timedelta

# Aktuelles Datum und Uhrzeit für timedelta-Operationen abrufen
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# 10 Tage und 15 Sekunden zur aktuellen datetime hinzufügen
now + timedelta(days=10, seconds=15)
datetime.datetime(2022, 8, 2, 21, 25, 17, 341081)

Und kann days, seconds und microseconds von einem datetime-Objekt subtrahieren:

from datetime import datetime, timedelta

# Aktuelles Datum und Uhrzeit für Subtraktionsbeispiel abrufen
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# 10 Tage und 15 Sekunden von der aktuellen datetime subtrahieren
now - timedelta(days=10, seconds=15)
datetime.datetime(2022, 7, 13, 21, 59, 41, 100883)