Was sollten wir tun, um uns vorzubereiten für das Jahr 2038?
Ich würde gerne glauben, dass einige der software, die ich Schreibe heute werden in 30 Jahren. Aber ich bin mir auch bewusst, dass viele davon basieren auf der UNIX-tradition, wodurch die Zeit als Anzahl der Sekunden seit 1970.
#include <stdio.h>
#include <time.h>
#include <limits.h>
void print(time_t rt) {
struct tm * t = gmtime(&rt);
puts(asctime(t));
}
int main() {
print(0);
print(time(0));
print(LONG_MAX);
print(LONG_MAX+1);
}
Ausführung:
- Thu Jan 1 00:00:00 1970
- Sa Aug 30 18:37:08 2008
- Tue Jan 19 03:14:07 2038
- Fri Dec 13 20:45:52 1901
Die Funktionen ctime(), gmtime () und localtime() alle nehmen als argument einen Wert der Uhrzeit für die Zeit in Sekunden seit der Epoche (00:00:00 UTC, January 1, 1970; siehe time(3) ).
Frage ich mich, ob es etwas gibt, proaktiv zu tun in diesem Bereich als Programmierer, oder sind wir darauf Vertrauen, dass alle software-Systeme (auch bekannt als Betriebssysteme), wird wie magisch in der Zukunft erweitert?
Update Es scheint, dass tatsächlich 64-bit-Systeme sind sicher von dieser:
import java.util.*;
class TimeTest {
public static void main(String[] args) {
print(0);
print(System.currentTimeMillis());
print(Long.MAX_VALUE);
print(Long.MAX_VALUE + 1);
}
static void print(long l) {
System.out.println(new Date(l));
}
}
- Wed Dec 31 16:00:00 PST 1969
- Sat Aug 30 12:02:40 PDT 2008
- Sat Aug 16 23:12:55 PST 292278994
- Sun Dec 02 08:47:04 PST 292269055
Aber was ist mit dem Jahr 292278994?
- Sie würde glücklich sein, wenn Sie vorhanden waren, haftet für einen Unfall, dass das Jahr, würden Sie nicht?
- Mach dir keine sorgen über das Jahr 292278994. Die meisten Systeme scheitern im Jahr 2147483647.
- Ich denke, Sie haben uns überzeugt - wir brauchen zu bewegen, um 128-bit-sofort!
- Die Welt endet im Jahr 2012, warum würden Sie brauchen, um zu Messen, jeder Zeit Vergangenheit?
- Die Sonne ist ein Roter Riese und die Menschheit ist Weg 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich geschrieben habe, Tragbarer Ersatz für die Zeit.h (derzeit nur localtime(), gmtime(), mktime() und timegm()) nutzt die 64-bit-Zeit, auch auf 32-bit-Maschinen. Es ist beabsichtigt, fallen in die C-Projekte als Ersatz für die Zeit.h. Es ist in Perl und ich beabsichtige, fix, Ruby und Python-2038 Probleme mit ihm, als gut. Dies gibt Ihnen einen sicheren Bereich von +/- 292 Millionen Jahren.
Finden Sie den code am y2038 Projekt. Bitte fühlen Sie sich frei, um post Fragen um die issue-tracker.
Als der "dies wird nicht ein problem für weitere 29 Jahre", Lesen in dieser Liste der standard-Antworten zu. Kurz gesagt, Sachen in der Zukunft passiert und manchmal müssen Sie wissen, Wann. Ich habe auch eine Präsentation über das problem, was ist die Lösung nicht, und was ist.
Oh, und vergessen Sie nicht, dass viele Zeit-Systeme nicht behandeln, Termine vor 1970. Sachen passiert, vor 1970, manchmal müssen Sie wissen, Wann.
ncal -p
für eine Liste und en.wikipedia.org/wiki/Gregorian_calendar#Adoption für die ganze Geschichte. Auch gibt es kein Jahr 0... es sei denn, Sie reden ein Astronom. Hoffentlich werden Sie nie zu tun haben mit dem julianischen/Gregorianischen Umwandlung.Kann man immer umsetzen RFC 2550 und werden für immer sicher 😉
Visual Studio bewegt, um eine 64-bit Darstellung von time_t in Visual Studio 2005 (während immer noch so dass _time32_t für rückwärts-Kompatibilität).
Solange Sie vorsichtig sind, immer schreiben von code in Bezug auf time_t und nicht davon ausgehen, nichts über die Größe dann als sysrqb Punkte out das problem wird gelöst durch den compiler.
Ich denke, dass sollten wir lassen den bug. Dann über 2036 können wir mit dem verkaufen beginnen-Beratung für große Summen von Geld, um alles zu testen. Nachdem alle nicht, wie wir erfolgreich geschafft 1999-2000 rollover.
Ich bin nur ein Scherz!
Ich saß in einer bank in London im Jahr 1999 und war ganz erstaunt, als ich sah, wie ein Berater starten Y2K-Tests der Kaffeemaschine. Ich denke, wenn wir gelernt haben, nichts von diesem Fiasko, es war, dass die überwiegende Mehrheit der software wird nur die Arbeit und der rest wird nicht dazu führen, eine Schmelze nach unten, wenn es scheitert und können behoben werden, nachdem das Ereignis, wenn nötig. Als solche, würde ich nicht nehmen Besondere Vorkehrungen bis viel näher an der Zeit.
Meinem Alter, ich denke, ich sollte zahlen viel in meine pension, und zahle alle meine Abteilung, so habe jemand, passen die software!
Tut mir Leid, wenn Sie denken über den "net present value" von jeder software, die Sie heute schreiben, es hat keinen Effekt was die software macht im Jahr 2038. Ein "return on investment" von mehr als ein paar Jahre ist ungewöhnlich, dass sich jedes software-Projekt, so dass Sie viel mehr Geld für Ihren Arbeitgeber, indem Sie die software ausgeliefert schneller, anstatt zu denken, dass weit Voraus.
Nur gängige Ausnahme ist software, die Vorhersagen, Zukunft, 2038 ist schon ein problem für Hypotheken-Angebot-Systemen.
Halten gute Dokumentation und eine Beschreibung Ihrer Zeit-Abhängigkeiten. Ich glaube nicht, dass viele Menschen haben darüber nachgedacht, wie schwer dieser übergang kann beispielsweise HTTP-cookies sind zu brechen, auf dass Datum.
Verstecken, denn die Apokalypse wird kommen.
Aber im ernst, ich hoffe, dass der Compiler (oder die Leute, die schreiben Ihnen, um genau zu sein) kann damit umgehen. Sie haben fast 30 Jahre. Ich hoffe, das ist genug Zeit.
An welchem Punkt wir starten die Vorbereitung für Y10K? Irgendwelche hardware-Hersteller /research labs schaute in die einfachste Art, sich zu bewegen, zu was auch immer neue Technologie, die wir brauchen, weil es?
Ich arbeite im embedded-und ich dachte, ich würde post unsere Lösung hier. Unsere Systeme sind auf 32 bits, und was wir verkaufen, jetzt hat ein warantee 30 Jahre, was bedeutet, dass Sie die Begegnung mit dem Jahr 2038 bug. Upgrade in die Zukunft war das auch keine Lösung.
Um dies zu beheben, setzen wir das kernel Datum 28 Jahre zuvor, dass das aktuelle Datum. Es ist nicht ein zufälliger offset, 28 Jahren, ist genau die Zeit, die es dauern wird, für die Tage der Woche in einem match wieder. Zum Beispiel Schreibe ich diese auf einen Donnerstag und das nächste mal am 7. März, ein Donnerstag ist in den 28 Jahren.
Darüber hinaus werden alle Anwendungen, die die Interaktion mit den Daten auf unsere Systeme wird das system-Datum (time_t) wandeln es in eine benutzerdefinierte time64_t und anwenden der 28-Jahre-offset der richtige Zeitpunkt.
Machten wir eine benutzerdefinierte Bibliothek, um diese zu bewältigen. Der code den wir benutzen ist, basierend auf dieser: https://github.com/android/platform_bionic
So, mit dieser Lösung können Sie kaufen sich eine extra 28 Jahre leicht.
if (month > 12) { month-=12; year++; }
bedeutet, dass wenn der code beginnt mit einem "div/mod 1461", jeder Schalttag wird Tag 1460 von einem 4-Jahres-Intervall, und Schaltjahre können ansonsten ignoriert werden, ist es Heute sinnvoll ist, Sie zu verwenden, 1. März 2016 und bald es sinnvoll ist, Sie zu verwenden, 1. März 2020, aber auch 2000 ist 30 Jahre besser als 1970.Durch 2038, Bibliotheken sollten alle mit 64-bit-Ganzzahlen, so wird dies nicht tatsächlich sein, dass große einen deal (auf software, die nicht völlig unbetreut).
COBOL-Programme, die Spaß machen könnte, obwohl.
Operative word being "sollte".
Wenn Sie brauchen, um futureproofing dann bauen Sie Ihre eigenen Datum - /Zeit-Klasse und verwenden, aber ich würde das nur tun, wenn Sie denken, dass das, was Sie schreiben, wird die verwendet werden auf älteren OS'