2010-11-16 14 views
17

AFAIK java przechowuje daty w długich zmiennych jako milisekundy. W związku z tym pewnego dnia nie będzie żadnej wartości (przyczyna długo ma maksimum), która będzie odpowiadała czasowi tej chwili. Czy wiesz, kiedy to się stanie?Kiedy data java się zwinie?

+8

Uważam, że od tego czasu oczekuje się, że słońce zajdzie nowa. Słońce już zaszło nova. –

+0

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

+2

Właściwie to mam zła - Java Date ma 292 milionów lat, ale według http://www.space.com/scienceastronomy/solarsystem/death_of_earth_000224.html Ziemia ma 500 milionów lat. –

Odpowiedz

47

to na tyle proste, aby dowiedzieć się:

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

Daje wyjście (na moim pudełku):

Sun Aug 17 07:12:55 GMT 292278994 

Być może trzeba będzie odjąć bit od Long.MAX_VALUE, aby poradzić sobie ze strefą czasową przepełnioną zakresem długości, ale dadzą rozsądne pole do popisu :)

+0

LOL, podoba mi się sposób, w jaki myślisz!aioobe przeszedł wszystko matematyczne, podczas gdy zdecydowałeś się zrobić programowo. –

+0

Ja też to lubię :-) Daje nawet sekundę, co się zepsuje;) – aioobe

+0

bzdura, lepiej zacznę się przygotowywać! – hvgotcodes

23

Zgodnie z obowiązującymi przepisami leap-year średnia liczba dni w roku będzie

                  365 + 1/4 − 1/100 + 1/400 = 365.2425 dni rocznie

Oznacza to, że średnio mamy 31556952000 milisekund na rok.

Długi Wartość reprezentuje liczbę milisekund od czasu Epoch (1 stycznia 1970), a maksymalna ilość reprezentowana przez długi Java 2 − 1, więc następującego obliczenia

                  1970 + (2 − 1)/31556952000

wynika, że ​​ta reprezentacja będzie przelewać roku 292278994.


Można, jak Jon Skeet points out zostać potwierdzone przez

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

+1 dla podejścia matematycznego. –

+1

Przy tak dużych liczbach, które są używane jako daty, prawdopodobnie trzeba uwzględnić także sekundy przestępne i przyspieszenie pływowe. – Qwerky

+1

@Qwerky, tak, też o tym myślałem i szukam astronomicznych pomiarów liczby milisekund w roku, ale wtedy uderzyło mnie, że pytanie dotyczyło implementacji daty w Javie, a to najprawdopodobniej * nie * Weź pod uwagę przyspieszenie pływowe itp :-) – aioobe