Der Unix Timestamp 2147483647 überläuft am 19. Januar 2038 die 32-Bit Ganzzahl. Erfahre, welche Systeme gefährdet sind und wie 64-Bit time_t das Problem löst.
2147483647 ist 2^31 - 1, der Maximalwert einer vorzeichenbehafteten 32-Bit Ganzzahl. In Binär:
01111111 11111111 11111111 11111111
Die führende 0 ist das Vorzeichenbit. Als Unix Timestamps in den späten 1960er Jahren entworfen wurden, war die Speicherung von Zeit als 32-Bit Ganzzahl eine pragmatische Wahl, die Genauigkeit, Speicherkosten und verfügbaren Bereich ausbalancierte. Eine vorzeichenbehaftete 32-Bit Ganzzahl bietet etwa 68 Jahre positive Timestamps ab dem 1. Januar 1970. Das war 1969 ausreichend Spielraum für die absehbare Zukunft.
Diese Zukunft ist jetzt der 19. Januar 2038 um 03:14:07 UTC.
Eine Sekunde nach 2147483647 überläuft ein vorzeichenbehafteter 32-Bit Zähler:
01111111 11111111 11111111 11111111 (2147483647)
+1
10000000 00000000 00000000 00000000 (-2147483648 im Zweierkomplement)
Das Bitmuster 0x80000000, interpretiert als vorzeichenbehaftete Ganzzahl, ist -2147483648. Als Unix Timestamp entspricht dies dem 13. Dezember 1901 um 20:45:52 UTC. Jedes System, das Timestamps mit einer vorzeichenbehafteten 32-Bit Ganzzahl speichert, vergleicht oder anzeigt, erfährt eines von:
Y2K (Jahr-2000-Problem) wurde durch zweistellige Jahresdarstellungen (99 -> 00) verursacht. Es war weit verbreitet, weil fast alle Software, die vor den späten 1990er Jahren geschrieben wurde, dieses Format verwendete, und die Fehlerart war stille Datenkorruption (das Jahr 2000 könnte als 1900 interpretiert werden).
Y2K38 ist strukturell ähnlich, aber begrenzter:
Konvertiere den Y2K38 Timestamp mit dem Unix Timestamp Konverter oder decodiere JWT Tokens mit JWT Decoder.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.