Zum Inhalt springen

Die Unix-Zeit und das Jahr-2038-Problem

Die Unix-Zeit ist eine Zahl, die Sekunden seit 1970 zählt, und am 19. Januar 2038 geht die 32-Bit-Version aus. Was das bedeutet, warum es schon jetzt Dinge bricht und wie es behoben wird.

· 10 Min. Lesezeit · Gabriel

Nahaufnahme eines Wandkalender-Rasters mit Datumszahlen und der Spaltenüberschrift Mittwoch
Inhaltsverzeichnis

Eine Uhr, die in Wahrheit nur eine einzige Zahl ist

Fast jedes Gerät, das Sie heute berührt haben, ist sich über eine Zahl einig. Nicht über die Uhrzeit Ihrer Stadt, nicht über Ihren Kalender, nicht über Ihre Zeitzone: über eine einzige ganze Zahl, die die Sekunden seit Mitternacht des 1. Januar 1970 in UTC zählt. Diese Zahl heißt Unix-Zeit, und sie ist gerade eine zehnstellige Zahl, die jede Sekunde um eins wächst.

Die Idee ist elegant. Statt „Dienstag, 15 Uhr in Berlin“ mit allen menschlichen Regeln zu speichern, merkt sich eine Maschine etwas wie 1771200000. Ein Augenblick, eine Zahl, ohne Mehrdeutigkeit. Ihr Server in Frankfurt, Ihr Telefon in Wien und ein Sensor in einer Fabrik sind sich darüber einig, auch wenn ihre Wanduhren Verschiedenes anzeigen. Die aktuelle Zahl und ihre lesbare Datumsform sehen Sie in unserem Unix-Zeitstempel-Konverter.

Das Problem: Eine Zahl, die nur steigt, geht irgendwann der Platz aus. Und für eine sehr verbreitete Art, die Unix-Zeit zu speichern, wissen wir genau, wann: am 19. Januar 2038 um 03:14:07 UTC.

Warum 1970

Der Startpunkt, „Epoche“ (epoch) genannt, ist der 1. Januar 1970. Daran ist nichts Kosmisches. Anfang der 1970er brauchten die Ingenieure, die Unix in den Bell Labs bauten, ein praktisches, junges Nulldatum, und ein runder Jahrzehntanfang taugte dafür. Augenblicke vor 1970 werden einfach durch negative Zahlen dargestellt.

Diese bescheidene Entscheidung verbreitete sich über die ganze digitale Welt. Heute steckt die Unix-Zeit in Datenbanken, Netzwerkprotokollen, Dateisystemen, Logs und der Firmware von Geräten, die ihre Erfinder nie vorhergesehen haben. Das Ursprungsdatum spielt fast nie eine Rolle. Wichtig ist, wie viel Platz der Computer zum Speichern der Zahl reserviert hat.

Die Zahl, die zur Neige geht

Jahrzehntelang war die übliche Art, die Unix-Zeit zu speichern, eine vorzeichenbehaftete 32-Bit-Ganzzahl. „Vorzeichenbehaftet“ heißt, ein Bit unterscheidet positive von negativen Zahlen, was einen Höchstwert von 2.147.483.647 lässt. So viele Sekunden kann dieser Zähler fassen.

Addieren Sie 2.147.483.647 Sekunden zu Mitternacht 1970, landen Sie am Dienstag, dem 19. Januar 2038, um 03:14:07 UTC. Eine Sekunde später läuft der Zähler über. Weil das Vorzeichenbit umkippt, springt die Zahl nicht auf 2.147.483.648: Sie wird negativ und landet am 13. Dezember 1901. Denken Sie an den Kilometerzähler eines alten Autos, der von 999999 auf 000000 springt, nur dass das Auto hier plötzlich im vorigen Jahrhundert auftaucht.

Ein Detail erfreut Fans: Die Grenzzeit ist 03:14:07, also 3, 14, 7, ein Wink zu den ersten Ziffern von Pi. Die Unix-Zeit hat mehrere solcher gefeierten Momente, und der von 2038 ist schlicht der erste, der Dinge kaputtmacht, statt ein T-Shirt zu zieren.

Unix-Zeit-WertAugenblick (UTC)Warum man sich erinnert
01. Januar 1970, 00:00:00Die Epoche: die Sekunde null, an der alles hängt.
1.000.000.0009. September 2001, 01:46:40Das „Unix-Billennium“, von Programmierern gefeiert.
1.234.567.89013. Februar 2009, 23:31:30Eine Zählung mit geordneten Ziffern; es gab echte Feiern.
2.147.483.64719. Januar 2038, 03:14:07Die Obergrenze der vorzeichenbehafteten 32 Bit: das Jahr-2038-Problem.

Warum das nicht das Jahr-2000-Problem in neuem Kostüm ist

Es ist verlockend, das neben das Jahr-2000-Problem zu legen und weiterzumachen. Doch es sind verschiedene Probleme. Das Jahr-2000-Problem war eine menschliche Konvention: Software speicherte Jahre zweistellig, also wurde aus „99“ ein „00“, und der Computer wusste nicht mehr, ob 1900 oder 2000 gemeint war. Es war ein Formatproblem, vor allem in der Schicht, in der Menschen Daten lesen und schreiben.

Das Jahr 2038 sitzt tiefer. Es geht nicht darum, wie ein Datum angezeigt wird, sondern um die grundlegende Einheit, mit der die Maschine die Zeit zählt. Man behebt es nicht, indem man vierstellige Jahre auf den Bildschirm schreibt; man muss das Gefäß vergrößern, das die Zahl selbst hält.

Jahr 2000Jahr 2038
Wurzel des ProblemsZweistellig gespeicherte JahreIn 32 Bit mit Vorzeichen gespeicherte Sekunden
Betroffene SchichtFormat und DarstellungDer Datentyp und der zugrundeliegende Speicher
Typische LösungVierstellige Jahre verwenden64-Bit-Ganzzahlen für die Zeit verwenden
Schwerer zu ändernAnwendungslogikFormate auf Datenträgern, Protokolle und alte Geräte

Das Seltsame: 2038 macht schon jetzt Dinge kaputt

Der feine Denkfehler ist, dies für eine ferne Klippe zu halten. Ist es nicht. Jedes System, das Daten in die Zukunft rechnet, überschreitet die Grenze von 2038 bereits heute. Ein 2026 abgeschlossener Dreißigjahreskredit berechnet Fälligkeiten nach 2038. Ein Zertifikat, eine Garantie, eine Police oder ein Langzeitabo macht Arithmetik, die die Grenze lange vor dem eigentlichen Datum überschreitet.

Deshalb gab es bereits vereinzelte Ausfälle: Ein System, das „in zwanzig Jahren“ in einer 32-Bit-Ganzzahl darstellen will, erhält plötzlich ein Datum aus 1901, eine negative Frist oder einen unerklärlichen Fehler. Das Jahr 2038 wartet nicht auf 2038. Es kommt früher zu jedem Code, der weit genug nach vorn blickt.

Wo es wirklich weh tut, und wo nicht

Die gute Nachricht: Ihr Laptop und Ihr Telefon sind fast sicher verschont. Moderne 64-Bit-Betriebssysteme speichern die Unix-Zeit längst in 64-Bit-Ganzzahlen. JavaScript zählt die Zeit in Millisekunden in einer Gleitkommazahl, die erst in Hunderttausenden von Jahren ein Problem bekommt. Python nutzt Ganzzahlen mit unbegrenzter Genauigkeit. Für die meiste aktuelle Software ist 2038 eine Fußnote.

Die Gefahr lebt anderswo: in 32-Bit-Geräten mit langer Lebensdauer und seltenen Updates. Router, Industriesteuerungen, intelligente Zähler, Medizingeräte, Auto-Steuergeräte und Sensoren, die man zwanzig oder dreißig Jahre lang einbaut und vergisst. Und in Formaten: feste 32-Bit-Datumsfelder in Dateien, Netzwerkprotokollen, alten Dateisystemen und längst entworfenen Datenbankspalten. Der Prozessor mag bereit sein, aber Daten, die im alten Format gespeichert wurden, reparieren sich nicht von selbst.

Die Lösung ist langweilig, und das ist gut so

Die Hauptlösung ist leicht zu beschreiben: die Zeit statt in 32 in einer vorzeichenbehafteten 64-Bit-Ganzzahl speichern. Das dehnt die Reichweite des Zählers auf rund 292 Milliarden Jahre aus, weit über das Alter des Universums hinaus. Man muss nichts Neues erfinden; man gibt der Zahl nur mehr Platz.

Ein Großteil dieser Arbeit ist schon getan. Der Linux-Kernel hat Jahre darauf verwendet, sogar 32-Bit-Plattformen 2038-sicher zu machen, die Standardbibliotheken wurden aktualisiert, und die BSDs taten dasselbe. Das Schwere sind nicht die Prozessoren, sondern die ruhenden Daten: Dateiformate, Protokolle und alte Geräte zu migrieren, ohne alles zu zerstören, was schon davon abhängt. Es ist stille, unglamouröse, zutiefst nützliche Arbeit; genau so soll gute Infrastruktur-Technik sein.

Was Sie tun können

  • Prüfen Sie, ob Ihre Sprache oder Datenbank die Zeit in 32 oder 64 Bit speichert, besonders auf alten Systemen.
  • Suchen Sie jede Stelle, an der Sie Daten Jahre oder Jahrzehnte voraus berechnen; dieser Code überschreitet 2038 schon heute.
  • Sehen Sie sich eingebettete Geräte und Firmware mit langer Lebensdauer an, wo Updates selten sind.
  • Behandeln Sie Daten auf Datenträgern und in Protokollen wie Verträge: Die Größe eines Zeitfeldes zu ändern, betrifft alles, was es liest.
  • Testen Sie die Systemuhr in einer kontrollierten Umgebung über 2038 hinaus, um zu sehen, was bricht, bevor es zählt.

Eine Zahl, die man im Auge behalten sollte

Das Jahr-2038-Problem erinnert gut daran, dass digitale Zeit eine menschliche Wahl ist, kein Naturgesetz. Wir entschieden, Sekunden zu zählen, entschieden, 1970 zu beginnen, und entschieden, wie viele Bits wir dafür einsetzen. Jede dieser Entscheidungen war zu ihrer Zeit vernünftig, und jede hinterlässt eine Spur, die Jahrzehnte überdauert.

Unterdessen steigt der Zähler still weiter, Sekunde um Sekunde. Wenn Sie neugierig sind, sehen Sie die aktuelle Zahl in unserem Unix-Zeitstempel-Konverter, bestätigen Sie das heutige Datum oder berechnen Sie die Zeit bis zu einem künftigen Datum mit dem Fristenrechner. Und wenn Sie Zeitfehler interessieren, die heute schon Software brechen, setzt unser Leitfaden zu den häufigsten Datums- und Zeitfehlern die Geschichte fort.

Weiterführende Quellen

Jahr-2038-Quiz

1. Was zählt die Unix-Zeit?
2. Warum entsteht das Jahr-2038-Problem?
3. Wann läuft die 32-Bit-Unix-Zeit über?
4. Wie unterscheidet sich 2038 vom Jahr-2000-Problem?
5. Warum kann 2038 schon heute Fehler verursachen?

← Zurück zu allen Artikeln