mitmario.dev

Datum und Uhrzeit

Python Sandbox 4 Min Lesezeit 5 BeispieleLektion 4 von 7

Kaum ein Programm, das im Büro Arbeit abnimmt, kommt ohne Datum aus. Rechnungen haben ein Zahlungsziel, Verträge eine Frist, Mitgliedschaften einen Beginn. Und mit nichts verrechnet man sich von Hand so schnell wie mit einem Datum.

Vierzehn Tage von Hand

Vierzehn Tage von Hand
tag = 15
print(f"{tag + 14}.10.2026")

tag = 25
print(f"{tag + 14}.10.2026")

Eine Rechnung vom 15.10.2026 ist in vierzehn Tagen fällig, also am 29.10.2026. Mit der Tageszahl gerechnet stimmt das noch. Beim 25. kommt dann aber der 39.10.2026 heraus, ein Tag, den es nicht gibt.

Man müsste wissen, wie viele Tage der Oktober hat, und in den nächsten Monat umbrechen. Am Jahresende ins nächste Jahr. Und im Februar müsste man fragen, ob gerade ein Schaltjahr ist. Das alles hat schon jemand gebaut, im Modul datetime.

Mit Tagen rechnen

Mit Tagen rechnen
from datetime import date, timedelta

rechnung = date(2026, 10, 25)
print(rechnung)
print(rechnung + timedelta(days=14))

abstand = date(2026, 12, 24) - rechnung
print(abstand)
print(abstand.days)

date(2026, 10, 25) ist ein Datum (date), angelegt in der Reihenfolge Jahr, Monat, Tag. Mit print erscheint es in der Form 2026-10-25, so wie es international üblich ist.

Gerechnet wird mit timedelta (Zeitabstand). timedelta(days=14) sind vierzehn Tage, und ein Datum plus vierzehn Tage ist wieder ein Datum, hier der 8. November. Um das Monatsende musst du dich nicht kümmern, das erledigt date.

Umgekehrt ergibt ein Datum minus ein Datum einen Abstand. print(abstand) gibt ihn als 60 days, 0:00:00 aus. Die nackte Zahl der Tage steht in abstand.days, und mit der kannst du weiterrechnen. Liegt das abgezogene Datum später, ist sie negativ.

Die Zeile from datetime import date, timedelta holt zwei Namen auf einmal. Das Modul heißt datetime, und darin gibt es neben date noch etwas, das ebenfalls datetime heißt. Das ist verwirrend. Daran gewöhnt man sich auch nicht wirklich, man merkt es sich einfach.

Deutsch lesen und schreiben

Deutsch lesen und schreiben
from datetime import datetime

datum = datetime.strptime("25.10.2026", "%d.%m.%Y").date()
print(datum)
print(datum.strftime("%d.%m.%Y"))
print(datum.strftime("%A, %d. %B %Y"))

Aus einer Datei kommt ein Datum als Text, "25.10.2026". Gelesen wird es mit datetime.strptime (string parse time), und im Muster dahinter steht, wie es aufgebaut ist. %d ist der Tag, %m der Monat und %Y das Jahr mit vier Stellen. Die Punkte stehen da, wo sie auch im Text stehen.

Groß und klein ist dabei nicht egal. %M sind Minuten, und wenn du das verwechselst, landest du still im Januar.

strptime liefert einen Zeitpunkt mit Datum und Uhrzeit. Mit .date() dahinter bleibt nur das Datum übrig, und das ist für Rechnungen und Fristen fast immer das, was man will. Zurück in Text geht es mit strftime (string format time) und demselben Muster.

In der letzten Zeile steckt ein Problem. %A ist der Name des Wochentags und %B der des Monats, und beide kommen auf Englisch, Sunday, 25. October 2026. Das ist auch auf einem deutschen Rechner so, weil Python bei Datum und Zahlen mit der englischen Grundeinstellung anfängt.

Umstellen ginge über das Modul locale aus Lektion 6.4. Das braucht aber eine deutsche Spracheinstellung im Betriebssystem, und die hat längst nicht jeder Rechner. Wenn ein Programm überall dasselbe ausgeben soll, kann man sich darauf also nicht verlassen.

Wochentage aus einer Liste

Wochentage aus einer Liste
from datetime import date

WOCHENTAGE = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]

datum = date(2026, 10, 25)
print(datum.weekday())
print(WOCHENTAGE[datum.weekday()] + ", " + datum.strftime("%d.%m.%Y"))

weekday() gibt den Wochentag als Zahl zurück. Die Woche fängt dabei am Montag mit 0 an. Der 25.10.2026 ist ein Sonntag, also eine 6. Dazu eine Liste mit den sieben Namen in genau dieser Reihenfolge, und die Zahl ist die Position darin. Mehr ist es nicht, und es geht auf jedem Rechner gleich.

Die Liste steht in Großbuchstaben da, WOCHENTAGE. Sie ist eine Konstante wie in Lektion 8.5, weil sie sich nie ändert, solange das Programm läuft.

Ein Datum mit Uhrzeit

Ein Datum mit Uhrzeit
from datetime import date, datetime

stichtag = date(2026, 11, 2)
faellig = datetime.strptime("08.11.2026", "%d.%m.%Y")
print(faellig)
print(faellig - stichtag)

Ohne .date() hinter strptime steht 2026-11-08 00:00:00 da, ein Zeitpunkt um Mitternacht. Und den kann man nicht von einem Datum abziehen. Das Programm endet mit TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date'. Für Python sind das zwei verschiedene Arten von Wert, und welche Uhrzeit ein Datum haben soll, wird nicht geraten. Mit .date() hinter dem strptime sind es zwei Daten, und dann kommen sechs Tage heraus.

Für den Tag, an dem ein Programm läuft, gibt es date.today(). In den Aufgaben dieses Kurses steht stattdessen ein festes Datum, weil mit date.today() morgen ein anderes Ergebnis herauskäme als heute und sich dann nichts mehr prüfen ließe. Im fertigen Werkzeug auf deinem Rechner ist date.today() aber genau richtig.

Der Rechner, auf dem dein Code hier läuft, geht übrigens nach Weltzeit (UTC). Nach deutscher Zeit ist es eine oder zwei Stunden später. Kurz nach Mitternacht ist dort also noch gestern.

Was die Aufgabe will

Es gibt eine Liste offener Rechnungen, jede mit Datum und Zahlungsziel in Tagen. Zu jeder gehört ein Termin, bis wann sie bezahlt sein muss, samt Wochentag auf Deutsch. Dazu ein Satz, wie es an einem festen Stichtag um sie steht. Überfällig, heute fällig oder noch ein paar Tage Zeit.

Zum Mitnehmen

Mit date aus dem Modul datetime rechnest du in Tagen. date(2026, 10, 25) plus timedelta(days=14) ergibt den 08.11.2026, und zwei Daten voneinander abgezogen ergeben die Tage dazwischen. Ein deutsches Datum liest datetime.strptime, strftime macht wieder Text daraus. Deutsche Wochentage holt man mit weekday() aus einer eigenen Liste.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 5 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.