O que devemos fazer para nos preparar para 2038?

Eu gostaria de pensar que alguns dos softwares que estou escrevendo hoje serão utilizados em 30 anos. Mas também estou ciente de que muito disso se baseia na tradição do UNIX de expor o tempo como o número de segundos desde 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);
}

A execução resulta em:

1 de janeiro 00:00:00 1970Sáb 30 de agosto 18:37:08 2008Ter 19 de janeiro 03:14:072038Sex 13 de dezembro 20:45:521901

As funções ctime (), gmtime () e localtime () assumem como argumento um valor de tempo que representa o tempo em segundos desde a Época (00:00:00 UTC, 1 de janeiro de 1970; consulte time (3)).

Gostaria de saber se há algo proativo para fazer nesta área como programador, ou devemos confiar que todos os sistemas de software (também conhecidos como Sistemas Operacionais) serão de alguma forma atualizados magicamente no futuro?

Atualizar Parece que, de fato, os sistemas de 64 bits estão protegidos disso:

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));
    }
}
Qua 31 de dezembro 16:00:00 PST 1969Sáb 30 de agosto 12:02:40 PDT 2008Sáb 16 de agosto 23:12:55 PST292278994Dom 02 de dezembro 08:47:04 PST292269055

Mas e o ano 292278994?

questionAnswers(10)

yourAnswerToTheQuestion