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 muchos de ellos se basa en la tradición UNIX de exponer tiempo que el número de segundos desde los resultados de 1970.¿Qué deberíamos hacer para prepararnos para 2038?
#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);
}
ejecución en:
- Jue Ene 1 00:00 : 00 1970
- Sab Ago 30 18:37:08 2008
- Mar Ene 19 03:14:07
- Vie Dic 13 20:45:52
La funciones ctime(), gmtime() y localtime() todos toman como argumento un valor de tiempo que representa el tiempo en segundos desde la Época (00:00:00 UTC, Enero 1, 1970; ver el tiempo (3)).
Me pregunto si hay algo proactivo que hacer en esta zona como un programador, o tenemos que confiar en que todos los sistemas operativos de software (aka Systems) serán de alguna forma ser mágicamente mejorados en el futuro?
actualización Parecería que los sistemas de 64 bits de hecho 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));
}
}
- Wed Dec 31 16:00:00 PST 1969
- Sab Ago 30 de 12:02: 40 PDT 2008
- Sab Ago 16 de 23:12:55 PST
- Dom Dic 02 08:47:04 PST
¿Pero y el año 292278994?
Estaría contento si estuviera presente para ser considerado responsable de algún accidente en ese año, ¿verdad? –
No se preocupe por el año 292278994. La mayoría de los sistemas fallan en el año 2147483647. – Schwern
Creo que nos ha convencido, ¡tenemos que movernos a 128 bits inmediatamente! – new123456