Das Y2k38 Problem

 

Was soll denn nun das wieder sein ?

Also, es gibt z.B. in der Programmiersprache C eine Zeit-Funktion, die die Sekunden zurückgibt, die seit 1.1.1970 0:00 Uhr vergangen sind.

Wir sind jetzt hier: das ist ausgedrückt in sec seit 1.1.1970
Das ist das dead-end Datum hier läuft nämlich der maximale Wert für eine longint-Zahl über

 

Was passiert dann ?

Also, sehr treffend hat das Helmut Giese formuliert:
"Was wird dann passieren? Schwer zu sagen. In 10 - 20 Jahren werden wir vielleicht 64 Bit große ints und 256 Bit große longs haben - und der Rechner wird eine Verdickung im Verbindungskabel zwischen Tastatur und Bildschirm sein."

Auf jeden fall haben wir ja noch einige Jährchen bis dahin. Ich bin dann 63, und freue mich schon, wenn so mancher PC oder wie die Dinger dann heissen den Geist aufgibt. Wie man weiss, wird ja neue Software doch immer nur auf alter Software aufgesetzt.

Was tun wir jetzt schon dagegen ?

Was ich persönlich schön finde ist, dass sich manche Programmierer heute schon etwas dazu denken und solche Fehlermeldungen produzieren:

Aber viele Programme stürzen einfach ab oder aber erzeugen lustige Sachen:

Probier es doch selbst, stell die Uhr auf das Jahr 2040 und teste dein Lieblingsprogramm mal (auf eigene Gefahr). Jawohl mein Solangesindwirschonzusammencounter funktioniert noch länger (zumindest im Internet Explorer) !

 

Was sagt Microsoft dazu ?


BUG: Visual C++ Gives GP Fault If System Date Past 18-Jan-2038

Last reviewed: January 18, 1996
Article ID: Q125494

The information in this article applies to:
  • The development environment included with: Microsoft Visual C++, 32-bit Edition, versions 2.0 and 2.1
SYMPTOMS

When the system clock is set to any date/time after January 18, 2038 at 19:14:07, loading the Visual C++ development environment fails with an application error or general protection (GP) fault and execution terminates.

CAUSE

The C Run-time (CRT) has a limitation with the time/date functions. Time is measured in seconds from Jan 1, 1970. This value is a 32-bit signed integer, so it has a maximum date of Jan 18, 2038 19:14:07 or 2^31 seconds (2,147,483,648 seconds) from Jan 1, 1970 00:00:00. Because the development environment depends on time/date routines from the CRT, the time functions will fail and cause the error.

RESOLUTION

Make sure that the system date is set correctly before January 18, 2038.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

 

Additional reference words: 2.00 2.10 GPF noupdate
KBCategory: kbenv kbbuglist
KBSubcategory: VWBIss


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

 

Der Jahr 30828 - Bug ?

Jetzt lass mich doch endlich in Ruhe !! Was´n da los ?

Es gibt folgende perverse Datenstruktur, die dazu verwendet wird das Datum einer Datei abzuspeichern:

The FILETIME structure holds a date and time associated with a file. The structure identifies a 64-bit integer specifying the number of 100 nanosecondintervals which have passed since January 1, 1601. This 64-bit value is split into the two dwords stored in the structure.

Natürlich braucht man diese Funktion! Wie hätte sonst Ihr Ur-ur-ur-ur-ur-ur-Großvater eine Datei anlegen sollen!
Aber es ist beruhigend zu wissen, wann genau eine Datei abgespeichert wurde. Diese Webseite z.B. wurde am 31.1.2002 um 14:51:30 und 234 tausendstel-sekunden und 455,3 millionstelsekunden abgespeichert.

Wann ist das Ablaufdatum dieser structure ?

64Bit-integer bedeutet diese Zahl geht bis 2^64
das ist 18.446.744.073.709.551.616
Da die Struktur sicher eine signed-integer ist (auch ins negative geht) dividiert durch 2
das ist 9.223.372.036.854.775.808
1 entspricht 0,1 µs daher dividiert durch 10
das ist 922.337.203.685.477.580
1s = 1.000.000 µs daher dividiert durch 1.000.000
das ist 922.337.203.685
1 Tag hat 24x3600 Sekunden
das ist 10.675.199
1 Jahr hat durchschnittlich 365,25 Tage
das ist 29.227
+ 1601 Jahre dazu
das ist 30.828

also deshalb heisst es Jahr 30828-Bug !