Date (Datum/Zeit)
Kurz: Ein Datentyp bzw. eine Klasse zur Darstellung und Verarbeitung von Datums- und Zeitangaben — Grundlage für alles von Zeitstempeln bis zu Kalenderberechnungen.
Genauer: Moderne Sprachen bieten meist unveränderliche (immutable) Datum/Zeit-Objekte an, bei denen jede “Änderung” (z. B. einen Tag addieren) ein neues Objekt erzeugt statt das bestehende zu verändern — das vermeidet subtile Bugs durch versehentlich geteilte, veränderte Objekte. Zeitzonen sind dabei eine häufige Fehlerquelle, weshalb viele Systeme intern konsequent mit UTC arbeiten und erst bei der Anzeige in die lokale Zeitzone umrechnen.
Im Detail
Datum/Zeit-Verarbeitung gilt zu Recht als eines der fehlerträchtigsten Standardthemen in der Softwareentwicklung — die Ursache liegt weniger im Code selbst als in der Unordnung der realen Welt: unterschiedliche Zeitzonen, Sommerzeitumstellungen, Schaltjahre, unterschiedliche Kalendersysteme und uneinheitliche Datumsformate zwischen Ländern (Tag/Monat/Jahr vs. Monat/Tag/Jahr).
from datetime import datetime, timezone
jetzt_utc = datetime.now(timezone.utc) # immer eindeutig, unabhängig vom ServerstandortDie wichtigste Grundregel moderner Systeme: intern immer UTC speichern, nur bei der Anzeige lokalisieren. UTC (koordinierte Weltzeit) kennt keine Sommerzeit und keine regionalen Verschiebungen — ein UTC-Zeitstempel ist immer eindeutig, egal wo auf der Welt er erzeugt oder gelesen wird. Würde man stattdessen lokale Zeit speichern, entstehen subtile Bugs: Dieselbe Uhrzeit kann während der Sommerzeitumstellung zweimal vorkommen (beim Zurückstellen) oder gar nicht existieren (beim Vorstellen), und ein Server in einer anderen Zeitzone als die Nutzer interpretiert gespeicherte Werte falsch.
Der zweite wichtige Punkt ist Unveränderlichkeit (Immutability):
datum1 = heute()
datum2 = datum1.plusTage(7)
// datum1 bleibt UNVERÄNDERT, datum2 ist ein neues, eigenständiges ObjektÄltere Datum-APIs (z. B. java.util.Date in frühen Java-Versionen) waren veränderlich — eine Methode konnte das übergebene Datumsobjekt direkt modifizieren. Das führte zu schwer auffindbaren Bugs, wenn ein Objekt an mehreren Stellen im Code referenziert wurde und eine Stelle es unerwartet veränderte, was sich dann überall sonst bemerkbar machte. Moderne APIs (Javas LocalDate/Instant, Pythons datetime bei korrekter Nutzung) geben bei jeder “Änderung” stattdessen ein komplett neues Objekt zurück, das Original bleibt garantiert unangetastet — dasselbe Grundprinzip wie bei Strings.
Siehe auch: Non-primitive Types