Du liest:
Der ultimative Python datetime Leitfaden

Der ultimative Python datetime Leitfaden

von Patrick
01.06.2020
Python datetime: So machst du es richtig!

Das Python datetime Modul gibt dir die Möglichkeit, mit dem Datum zu rechnen, dieses als String auszugeben oder einen String in ein Datumsobjekt zu konvertieren. Wie du das machen kannst, zeige ich dir im folgenden Artikel.

1. Python date, time und datetime

Das Modul datetime beinhaltet unter anderem die Klasse date. Du kannst mit date ein Datum darstellen, indem du es mit Jahr, Monat und Tag initialisierst.

from datetime import date

print(date(2025, 6, 30))
# 2025-06-30

Mit dem alternativen Konstruktor today kannst du das aktuelle Datum ausgeben lassen.

print(date.today())
# 2020-05-31

Über die Attribute year, month und day kannst du auch nur auf Jahr, Monat oder Tag des Datums zugreifen.

heute = date.today()
print(f'Jahr: {heute.year}')
print(f'Monat: {heute.month}')
print(f'Tag: {heute.day}')
2020-05-31
Jahr: 2020
Monat: 5
Tag: 31

Weiterhin steht uns noch die Klasse time zur Verfügung, um die Zeit darzustellen.

from datetime import time

print(time(23, 55, 12))
print(time(12, 30, 25))
23:55:12
12:30:25

Die Klasse datetime aus dem gleichnamigen Modul stellt eine Kombination aus Datum und Zeit dar.

from datetime import datetime

print(datetime(2022, 12, 31, 23, 59, 59))
# 2022-12-31 23:59:59

Sie verfügt unter anderem über den alternativen Konstruktor now. now erzeugt ein Objekt von datetime mit dem aktuellen lokalen Zeitpunkt.

print(datetime.now())
print(datetime.utcnow())
2020-05-31 20:35:55.668337
2020-05-31 18:35:55.668337

2. Rechnen mit Python timedelta

Um zu einem Datum einen Tag hinzuzurechnen, kannst du die Klasse timedelta verwenden. Ihr Konstruktor akzeptiert Werte für die Parameter days, weeks, seconds, microseconds, milliseconds, minutes, und hours. Im Folgenden werde ich primär days für Tage verwenden.

from datetime import datetime, timedelta

ein_tag = timedelta(days=1)
print('1 Tag:', ein_tag)
# 1 Tag: 1 day, 0:00:00

weeks wird übrigens ebenfalls wie eine Anzahl von Tagen berechnet.

sechs_wochen = timedelta(weeks=6)
print('6 Wochen:', sechs_wochen)
# 6 Wochen: 42 days, 0:00:00

Um ein Datum 90 Tage in der Zukunft zu erhalten, kannst du demnach einfach das aktuelle Datum mit einem timedelta von 90 Tagen verrechnen.

in_90_tagen = datetime.now() + timedelta(days=90)
print(in_90_tagen)
# 2020-08-29 20:35:55.673354

Genauso kannst du das gestrige sowie das morgige Datum berechnen.

heute = datetime.now()
ein_tag = timedelta(days=1)
gestern = heute - ein_tag
morgen = heute + ein_tag
print('Gestern:', gestern)
print('Heute:', heute)
print('Morgen:', morgen)
Gestern: 2020-05-30 21:47:42.055916
Heute: 2020-05-31 21:47:42.055916
Morgen: 2020-06-01 21:47:42.055916

Wenn du ein Objekt von datetime mit einem Anderen subtrahierst, erhältst du als Ergebnis ein Objekt von timedelta.

print('Morgen - Gestern:', morgen - gestern)
print('Gestern - Morgen:', gestern - morgen)
Morgen - Gestern: 2 days, 0:00:00
Gestern - Morgen: -2 days, 0:00:00

Du kannst Objekte der Klasse datetime auch miteinander vergleichen.

print(gestern < heute)
# True
print(heute < morgen)
# True
print(heute > morgen)
# False
print(gestern == morgen)
# False

3. datetime als String anzeigen mit strftime

Mit strftime kannst du sogenannte Format Codes angeben, um datetimes in Strings umzuwandeln. Um den Tag auszugeben, gibt es die Format Codes %A, %a und %d. Der Erste gibt den Tag als Wort aus, der Zweite die Abkürzung und der Dritte gibt ihn als Zahl zurück.

jetzt = datetime.now()
print(f'Tag: {jetzt.strftime("%A")}')
print(f'kurz: {jetzt.strftime("%a")}')
print(f'Zahl: {jetzt.strftime("%d")}')

in_30_tagen = jetzt + timedelta(days=30)
print(f'Tag: {in_30_tagen.strftime("%A")}')
print(f'kurz: {in_30_tagen.strftime("%a")}')
print(f'Zahl: {in_30_tagen.strftime("%d")}')
Tag: Sunday
kurz: Sun
Zahl: 31
Tag: Tuesday
kurz: Tue
Zahl: 30

Das gleiche tun für den Monat %B, %b und %m.

print(f'Monat: {jetzt.strftime("%B")}')
print(f'kurz: {jetzt.strftime("%b")}')
print(f'Zahl: {jetzt.strftime("%m")}')

print(f'Monat: {in_30_tagen.strftime("%B")}')
print(f'kurz: {in_30_tagen.strftime("%b")}')
print(f'Zahl: {in_30_tagen.strftime("%m")}')
Monat: May
kurz: May
Zahl: 05
Monat: June
kurz: Jun
Zahl: 06

Für das Jahr gibt es nur %Y und %y.

print(f'Jahr: {jetzt.strftime("%Y")}')
print(f'kurz: {jetzt.strftime("%y")}')

print(f'Jahr: {in_30_tagen.strftime("%Y")}')
print(f'kurz: {in_30_tagen.strftime("%y")}')
Jahr: 2020
kurz: 20
Jahr: 2020
kurz: 20

Weiterhin lassen sich Datum und Zeit gemeinsam wie auch einzeln so vollständig ausgeben.

print(f'Datum & Zeit: {jetzt.strftime("%c")}')
print(f'Datum: {jetzt.strftime("%x")}')
print(f'Zeit: {jetzt.strftime("%X")}')

print(f'Datum & Zeit: {in_30_tagen.strftime("%c")}')
print(f'Datum: {in_30_tagen.strftime("%x")}')
print(f'Zeit: {in_30_tagen.strftime("%X")}')
Datum & Zeit: Sun May 31 20:50:09 2020
Datum: 05/31/20
Zeit: 20:50:09
Datum & Zeit: Tue Jun 30 20:50:09 2020
Datum: 06/30/20
Zeit: 20:50:09

Außerdem kannst du die Codes frei variieren.

jetzt = datetime.now()
print(jetzt.strftime("%I:%M:%S %p"))
print(jetzt.strftime("%H:%M"))
08:50:09 PM
20:50

4. Strings in Python datetime konvertieren

Mit der Methode strptime kannst du Strings in datetimes konvertieren. Dazu musst du das Format des Strings in Form von Format Codes wie bereits bei strftime angeben.

from datetime import datetime

string = '1989-06-30 15:33:02'
obj = datetime.strptime(string, '%Y-%m-%d %H:%M:%S')
print(obj)
# 1989-06-30 15:33:02

5. Zeitzonen mit Python pytz

Mit dem Modul pytz (https://pypi.org/project/pytz/) kannst du verschiedene Zeitzonen angeben, deren Datum und Uhrzeit zurückgegeben werden sollen.

from datetime import datetime
import pytz

print(datetime.now())
# 2020-06-01 00:02:56.716643
print(datetime.now(pytz.utc))
# 2020-05-31 22:02:56.725645+00:00

Du kannst auch timezone von pytz direkt importieren, um die Zeitzone als String anzugeben.

from pytz import timezone

print(datetime.now(timezone('US/Eastern')))
# 2020-05-31 18:02:57.165641-04:00
print(datetime.now(timezone('Europe/Berlin')))
# 2020-06-01 00:02:57.168643+02:00

6. Fazit

Das Modul datetime stellt unheimlich praktische Methoden bereit, um ein Datum mit einem anderen zu vergleichen. Ebenfalls ist es einfach möglich, selbst festzulegen, wie das Datum als String angezeigt werden soll oder von dem Datum ein paar Tage abzuziehen.

Hast du Fragen? Gefällt dir etwas an dem Artikel besonders oder gar nicht? Lass es mich bitte mit einem Kommentar wissen.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren

Arrow-up

Programmieren lernen war noch nie so einfach.

Lerne von echten Experten durch echte Praxisprojekte und mit individueller Hilfe, falls du mal nicht weiterkommst!

keine Zahlungsdaten notwendig!