2010-11-16 15 views
17

AFAIK Java almacena las fechas en variables largas como milisegundos. En consecuencia, algún día no habrá ningún valor (porque long tiene un máximo) que corresponderá al momento de ese instante. ¿Sabes cuándo sucederá?¿Cuándo se colapsará la fecha de Java?

+8

Creo que se espera que el sol se vuelva nova antes. Sun ya se ha convertido en nova. –

+0

@Paul Tomblin .... whahahahaha! :) –

+2

En realidad, tengo ese error - Java Date tiene 292 millones de años, pero de acuerdo con http://www.space.com/scienceastronomy/solarsystem/death_of_earth_000224.html la tierra tiene 500 millones de años. –

Respuesta

47

Es bastante fácil de averiguar:

public class Test { 
    public static void main(String[] args) { 
     System.out.println(new java.util.Date(Long.MAX_VALUE)); 
    } 
} 

Da salida (en mi caja):

Sun Aug 17 07:12:55 GMT 292278994 

Puede que necesite restar un poco del Long.MAX_VALUE para hacer frente a su zona horaria que desborda el rango de longitud, pero dará un estadio razonable :)

+0

LOL, me gusta la forma en que piensas!Aioobe fue todo matemático mientras elegiste hacerlo programáticamente. –

+0

Me gusta también :-) Incluso da el segundo se romperá;) – aioobe

+0

mierda, ¡mejor me preparo para eso! – hvgotcodes

23

Según las actuales regulaciones leap-year el número promedio de días por año será

                  365 + 1/4 − 1/100 + 1/400 = 365,2425 días por año

Esto significa que, en promedio, tenemos 31556952000 milisegundos por año.

El valor larga representa el número de milisegundos desde el Epoch (1er de de enero de 1970) y el número máximo representado por un Java largo está 2 − 1, por lo que el siguiente cálculo

                  1970 + (2 − 1)/31556952000

revela que esta representación se desbordará años 292278994.


Esto puede, como Jon Skeet points out, ser confirmado por

-> System.out.println(new Date(Long.MAX_VALUE)); 
Sun Aug 17 08:12:55 CET 292278994 
+1

+1 para un enfoque matemático. –

+1

Con números tan grandes que se utilizan como fechas, es probable que también deba tenerse en cuenta los segundos interminables y la aceleración de las mareas. – Qwerky

+1

@Qwerky, sí, también pensé en eso y busqué mediciones astronómicas de la cantidad de milisegundos de un año, pero luego me di cuenta de que la pregunta era acerca de la implementación de fecha de Java, y esto es muy probable * no * tener en cuenta la aceleración de las mareas, etc. :-) – aioobe

Cuestiones relacionadas