veröffentlicht am: 01.06.2020 zuletzt aktualisiert am: 02.02.2023
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.
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
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
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
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
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
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.
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Python und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig