Timestamp, Jahr 2038 Problem für 64-Bit-Ubuntu-System

24

Ich benutze ein 64-Bit-Ubuntu-System.

Ich arbeite derzeit an einem Projekt, das MariaDB enthält. Ich plane, die Zeitstempeltechnik in das Projekt einzuführen, damit die Leute die richtige Zeit für verschiedene Zeitzonen erhalten.

Ich habe einige Artikel über das Problem des Jahres 2038 für den Zeitstempel gehört und gelesen. Viele Artikel schlagen vor, dass wir ein 64-Bit-System verwenden, um ein bisschen mehr Zeit zu gewinnen.

Auf wie viel Zeit bezieht sich dieses „Bit“? Reicht es aus, um Webanwendungen bis zum Ende zu verwalten? Wenn das nicht der Fall ist, ist es wie eine Verlängerung um nur zwei Jahre. Werden wir also im Jahr 2040 Anwendungen haben, die nicht richtig funktionieren?

tet
quelle
27
64-Bit-Systeme, die 64-Bit- time_tGanzzahlen verwenden, geben Ihnen ein bisschen mehr Zeit - bis zum Sonntag, den 4. Dezember, 15:30:08 Uhr, 292.277.026.596 Uhr. Hoffe, es ist lang genug für Ihre Bewerbung;)
Ron
4
Es gibt dir kein "bisschen" mehr. Es gibt Ihnen genau 32 Bits mehr.
user12205
5
64-Bit-Zeitstempel sind eine weitere Maßnahme dieser Art. Was ist mit den Leuten, die in 100.000.000.000.000 CE am Projekt Utopia arbeiten? Sie brauchen auch funktionierende Computersysteme! Die Verwendung von 128-Bit-Zeitstempeln würde es uns ermöglichen, jede Zeit nicht nur anhand dieser Iteration des Universums eindeutig zu identifizieren, sondern auch anhand vieler, vieler anderer.
Blacklight Shining
1
Da Sie auf dieser Site noch nie eine Antwort akzeptiert haben: Wenn Ihnen eine der folgenden Antworten weitergeholfen hat, vergessen Sie nicht, auf das graue links neben dem Text zu klicken , was bedeutet , dass diese Antwort gültig ist ! ;-)
Fabby

Antworten:

34

Nun, wenn es eine Option gibt, buchstäblich ein "Bit" zu kaufen, dh die Übertragung von einer vorzeichenbehafteten 32-Bit-Ganzzahl zu einer vorzeichenlosen 32-Bit-Ganzzahl, funktionieren die Dinge in 2106 weiter.

Die Übertragung auf 64bit ist "etwas besser". Sie erhalten eine Auflösung von Hunderten Milliarden Jahren.

Und Ubuntu macht das:

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

Dies ist jedoch die Betriebssystemebene. Nur weil Ubuntu eine 64-Bit-Ganzzahl für seine Zeiten verwendet, bedeutet dies nicht, dass MySQL / MariaDB sie zum Speichern seiner Zeitstempel verwendet. Wenn Datumsangaben nach 2038 für Sie jetzt wichtig sind, beginnen Sie sofort mit dem Testen.

Eigentlich kann ich dir etwas Zeit sparen. Es ist immer noch kaputt. Dieser Fehler wurde vor über einem Jahrzehnt gemeldet, aber sein Haupttest schlägt immer noch mit einem 64-Bit-Int fehl.

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

Dies ist nicht einmal Lagerung. Es ist leicht erbärmlich.

(Und ja, das lief auf MariaDB, Version 10.1)

Oli
quelle
8
Nach 10 Jahren haben sie noch 22 Jahre Zeit, um das Problem zu beheben. <Daumen
drücken
4
Hinweis: Die Verwendung von vorzeichenlosen 32-Bit-Ganzzahlen ist ein Hack .
Kevin
6

Speichern Sie es überhaupt nicht als Ganzzahl. Speichern Sie es als ISO 8601- formatierte Datumszeichenfolge. Dies ist das im Internet verwendete Standardformat.

9999-12-31T23:59:59+00:00
dobey
quelle
17
Lassen Sie uns alle ein Glas auf den Year10K Bug heben! ;) Aber im Ernst, während Strings wirklich erweiterbar sind, sind sie relativ groß (Ihr Beispiel ist 200 Bit!) Und das Parsen und Manipulieren von primitiven Zahlen ist um eine Unmenge schneller. Das zählt.
Oli
6
Dies ist ein großartiges Format für die Anzeige - und das nur. Für alles andere (dh die Verarbeitung der Daten bis zum letzten Moment, in dem Sie sich entscheiden, sie für den Benutzer zu formatieren), wie Vergleichen, Rechnen usw., ist der Unix-Zeitstempel als Ganzzahl (oder Gleitkomma) viel besser.
egmont
1
@Oli Es ist wichtig, ob es wirklich wichtig ist. Diese Lösung schlägt nicht fehl, wenn Zeiten älter als die UNIX-Epoche sind. Das Format ist der Standard, der für Daten im gesamten Internet, in Protokollen und APIs verwendet wird. Wenn Sie etwas in einer MariaDB-Spalte speichern, sollten Sie es tatsächlich so auf der Festplatte speichern. Sicher, im Speicher möchten Sie es vielleicht in einer zugänglicheren Datenstruktur speichern. Und Sie brauchen nicht die letzten 40 Bits, wenn Sie immer UTC verwenden.
Dobey