¿Qué debemos hacer para prepararnos para 2038?

Me gustaría pensar que parte del software que estoy escribiendo hoy se usará en 30 años. Pero también soy consciente de que gran parte se basa en la tradición de UNIX de exponer el tiempo como la cantidad 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);
}

La ejecución da como resultado:

Jue 1 ene 00:00:00 1970Sáb 30 ago 18:37:08 2008Martes 19 de enero 03:14:072038Vie 13 dic 20:45:521901

Las funciones ctime (), gmtime () y localtime () toman como argumento un valor de tiempo que representa el tiempo en segundos desde la Época (00:00:00 UTC, 1 de enero de 1970; ver hora (3)).

Me pregunto si hay algo proactivo que hacer en esta área como programador, o ¿debemos confiar en que todos los sistemas de software (también conocidos como sistemas operativos) se actualizarán mágicamente en el futuro?

Actualizar Parece que, de hecho, los sistemas de 64 bits están a salvo de esto:

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

Pero ¿qué pasa con el año 292278994?

Respuestas a la pregunta(10)

Su respuesta a la pregunta