Was sollen wir tun, um uns auf 2038 vorzubereiten?

Ich würde gerne denken, dass einige der Software, die ich heute schreibe, in 30 Jahren verwendet werden. Mir ist aber auch bewusst, dass ein Großteil davon auf der UNIX-Tradition basiert, Zeit als Anzahl von Sekunden seit 1970 zu belichten.

#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);
}

Execution führt zu:

Thu Jan 1 00:00:00 1970Sat 30. August 18:37:08 2008Dienstag, 19. Januar, 03:14:07 2038Fri 13. Dezember 20:45:52 1901

Die Funktionen ctime (), gmtime () und localtime () nehmen alle einen Zeitwert als Argument, der die Zeit in Sekunden seit der Epoche darstellt (00:00:00 UTC, 1. Januar 1970; siehe time (3)). .

Ich frage mich, ob es in diesem Bereich als Programmierer proaktive Maßnahmen gibt, oder ob wir darauf vertrauen können, dass alle Softwaresysteme (auch bekannt als Betriebssysteme) in Zukunft auf magische Weise aktualisiert werden?

Aktualisiere Es scheint, dass 64-Bit-Systeme tatsächlich sicher sind:

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 1969Sat Aug 30 12:02:40 PDT 2008Sat 16. August 23:12:55 PST 292278994Sun Dec 02 08:47:04 PST 292269055

Aber was ist mit dem Jahr 292278994?

Antworten auf die Frage(20)

Ihre Antwort auf die Frage