Das Jahr-2038-Problem: Die Grenze von Unix-Zeitstempeln
Die Zeit bleibt nicht stehen. Eine bestimmte Speicherform erreicht ihre größte positive Zahl.
Ein Zähler mit begrenztem Platz
Unix-Zeit zählt Sekunden seit dem 1. Januar 1970 um 00:00:00 UTC, ohne Schaltsekunden mitzuzählen. Eine vorzeichenbehaftete 32-Bit-Ganzzahl reicht bis 2.147.483.647. Als Unix-Sekunden entspricht das dem 19. Januar 2038 um 03:14:07 UTC. Eine Sekunde später passt der Wert nicht mehr in diese Darstellung. Das Datum ist gewöhnlich; die Speichergrenze ist das Problem.
Nicht jeder Computer hat diese Grenze
Betroffen sind Systeme, Dateiformate, Protokolle oder Datenbanken, die diese begrenzte Darstellung noch verwenden. Größere Zeittypen können spätere Daten darstellen. Eine moderne Anwendung kann jedoch mit einer älteren Komponente kommunizieren; die sichtbare Uhr allein zu prüfen reicht nicht. Ein zu großer Wert kann abgelehnt, abgeschnitten oder falsch interpretiert werden. Nicht jedes Gerät springt auf 1901 zurück, und das Internet bleibt nicht einfach stehen.
Eine zweite Falle ist tausendmal kleiner
Sekunden und Millisekunden sind verschiedene Einheiten. Gib 2.147.483.647 als Millisekunden ein, und du landest im Januar 1970 statt 2038. Die Einheit aus der Ziffernzahl zu erraten ist besonders bei alten Daten oder kleinen Werten unzuverlässig. Unser Werkzeug fragt ausdrücklich nach der Einheit. Notiere beim Debuggen Wert, Einheit und erwartetes UTC-Ergebnis. Diese kleine Gewohnheit verhindert erstaunlich viele Datumsfehler.
Erkunde die Grenze
Probiere 2147483647 und 2147483648 mit der Einheit Sekunden. Die Ergebnisse liegen eine Sekunde auseinander, beide im Jahr 2038, weil dieses Browserwerkzeug nicht auf vorzeichenbehaftete 32-Bit-Unix-Sekunden begrenzt ist. Das belegt diese Rechnung, nicht die Bereitschaft all deiner Systeme. Teste bei einer Anwendung Speicher und Schnittstellen mit Daten auf beiden Seiten der Grenze, einschließlich Speichern und erneutem Lesen. Eine korrekte Anzeige ist nur ein Teil.
Teste dein Gespür
Quellen und weitere Lektüre
Eigene Erklärungen mit Rechenbeispielen. Quellenlinks führen zu den zugrunde liegenden Standards und Dokumentationen.