Articles

Was ist das Jahr-2038-Problem?

Das Jahr-2000-Problem wird heutzutage von den meisten Menschen verstanden, weil es in den Medien viel Aufmerksamkeit erhalten hat.

Die meisten Programme, die in der Programmiersprache C geschrieben sind, sind relativ immun gegen das Jahr-2000-Problem, leiden aber stattdessen unter dem Jahr-2038-Problem. Dieses Problem entsteht, weil die meisten C-Programme eine Bibliothek von Routinen verwenden, die Standardzeitbibliothek genannt wird. Diese Bibliothek legt ein Standard-4-Byte-Format für die Speicherung von Zeitwerten fest und stellt außerdem eine Reihe von Funktionen zur Konvertierung, Anzeige und Berechnung von Zeitwerten zur Verfügung.

Anzeige

Das Standard-4-Byte-Format geht davon aus, dass der Beginn der Zeit der 1. Januar 1970 um 12:00:00 Uhr ist. Jeder Zeit-/Datumswert wird als die Anzahl der Sekunden ausgedrückt, die auf diesen Nullwert folgen. Der Wert 919642718 ist also 919.642.718 Sekunden nach 12:00:00 Uhr am 1. Januar 1970, also am Sonntag, 21. Februar 1999, um 16:18:38 Uhr pazifischer Zeit (USA). Dies ist ein praktisches Format, denn wenn Sie zwei beliebige Werte subtrahieren, erhalten Sie eine Anzahl von Sekunden, die der Zeitdifferenz zwischen ihnen entspricht. Dann können Sie andere Funktionen in der Bibliothek verwenden, um zu bestimmen, wie viele Minuten/Stunden/Tage/Monate/Jahre zwischen den beiden Zeiten vergangen sind.

Wenn Sie „How Bits and Bytes Work“ gelesen haben, wissen Sie, dass eine vorzeichenbehaftete 4-Byte-Ganzzahl einen Maximalwert von 2.147.483.647 hat, und daher kommt das Jahr-2038-Problem. Der Maximalwert der Zeit, bevor sie auf einen negativen (und ungültigen) Wert übergeht, ist 2.147.483.647, was dem 19. Januar 2038 entspricht. An diesem Datum werden alle C-Programme, die die Standard-Zeitbibliothek verwenden, Probleme mit Datumsberechnungen haben.

Glücklicherweise ist dieses Problem etwas einfacher zu beheben als das Jahr-2000-Problem auf Großrechnern. Gut geschriebene Programme können einfach mit einer neuen Version der Bibliothek neu kompiliert werden, die z.B. 8-Byte-Werte für das Speicherformat verwendet. Dies ist möglich, weil die Bibliothek die gesamte Zeitaktivität mit eigenen Zeittypen und Funktionen kapselt (im Gegensatz zu den meisten Mainframe-Programmen, die ihre Datumsformate oder Berechnungen nicht standardisiert haben). Das Jahr-2038-Problem sollte also nicht annähernd so schwer zu beheben sein, wie es das Y2K-Problem war.

Hier sind einige interessante Links:

Werbung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.