2010-06-04 6 views
37

Tengo una aplicación web que ordena cosas usando una marca de tiempo, que es solo una larga. Mi backend aplicación web pasa a ser escrito en Java, por lo que estoy usando:¿Cuándo se desbordará System.currentTimeMillis()?

long timestamp = System.currentTimeMillis(); 

qué año (aproximadamente) será este fracaso? Quiero decir en algún momento, el rango de una larga se desbordará, ¿verdad? Puede que todos hayamos muerto hace tiempo, pero solo tengo curiosidad. ¿Será como y2k otra vez? ¿Qué puedo hacer para prepararme para esto? Ridículo, lo sé, ¡solo curiosidad!

Gracias

Respuesta

85

inundará al

System.out.println(new Date(Long.MAX_VALUE)); 

que imprime

Sun Aug 17 03:12:55 GMT-04:00 292278994 

Eso es por lo tanto después de un poco más de 292 millones de años. Yo diría que hay un suficiente de tiempo para inventar una solución mientras tanto. Para ser honesto, no espero que la humanidad sobreviva a esto. Existimos solo unos pocos segundos en comparación con age of the world en escala de horas y no tardaremos mucho.

enter image description here

+0

@Farbod: No tengo idea de a qué se refiere. No es agosto 292278994 todavía. – BalusC

5

El valor máximo de una aplicación Java es long2^63 - 1, y si convierte esa cantidad de milisegundos en unidades de tiempo prácticos, se encuentra que el contador se desbordará en aproximadamente 290 millones de años. Así que no te preocupes por eso ;-) Si todavía hay alguien cerca para ejecutar las computadoras, estoy seguro de que habrá cambiado a contadores de tiempo de 128 bits para entonces (o escogió una nueva época).

10

intente ejecutar este código:

System.out.println(new Date(Long.MAX_VALUE)); 

que imprime algo como esto dependiendo de su lugar:

Sun Aug 17 17:12:55 EST 292278994 

muy larga en el futuro, así que no hay necesidad de preocuparse por desbordamiento.

7

"¿Qué puedo hacer para prepararse para esto?"

Bueno, usted podría tener su ataúd equipado con las últimas y mejores juguetes de TI engranajes/friki. Pero de alguna manera creo que estarán un poco "desactualizados" en 292,278,994 AD. Y estarás bastante aburrido con ellos para entonces.

Eso sí, tendrá suficiente tiempo para reescribir el sistema operativo desde cero para utilizar un reloj de 128 bits. Eso suena como un proyecto divertido para pasar el tiempo. :-)

7

Parece poco probable que su aplicación web aún esté disponible el dom 17 de agosto a las 17:12:55 EST 292278994 (calculada por otros). Parece incluso más improbable que sigas siendo responsable de la aplicación web. (Si usted todavía es responsable por ello, probablemente recibirá un pago a una tasa más alta en el futuro, así que déjelo resbalar por ahora y recoja mucho dinero después :)

Es mucho, mucho más probable que el sistema reloj está configurado incorrectamente a algún valor extravagante.Usted puede prepararse para esta relativa facilidad - pseudocódigo a continuación

long reasonableDate () 
{ 
    long timestamp = System.currentTimeMillis(); 
    assert timestamp after 2010AD : "We developed this web app in 2010. Maybe the clock is off." ; 
    assert timestamp before 10000AD : "We don't anticipate this web app will still be in operation in 10000AD. Maybe the clock is off." ; 
    return (timestamp) ; 
} 

Si estás vivo cuando cualquiera de esas afirmaciones se dispara, entonces es probable que pueda cargar a sus clientes grandes cantidades de dinero, ya sea para fijar el reloj del sistema o cambiar la afirmación (según sea apropiado).

0

El error en estas respuestas está asumiendo que el sistema se está ejecutando es de 64 bits y devuelve una representación de 64 bits de milisegundos desde 1970. Linux utiliza una representación de 32 bits y el desbordamiento se encuentra en 2038.

Ver Year 2038 problem para referencia

Cuestiones relacionadas