2015-11-17 11 views
11

Chcę obliczyć różnicę między 2 datami z różnymi latami, w sekundach. Robię to tak:Różnica między dwoma datami z różnymi latami

public static int dateDifference(Date d1, Date d2){ 
    return (int) (d2.getTime() - d1.getTime()); 
} 

Problemem jest to, że gdy uruchamiam to na przykład dla tych terminach:

d1 = Tue Nov 17 14:18:20 GMT+01:00 2015 
d2 = Fri Nov 28 15:37:50 GMT+02:00 2016 

mam -169191300 wyniku.

Ale gdy lata są takie same, otrzymuję właściwy wynik, 954959013.

Czy ktoś może wyjaśnić, co się tutaj dzieje?

+0

Zalecam, aby w [Joda-time] (http://www.joda.org/joda-time/) lub 'java.time' w języku Java 8 sprawdzić operacje związane z czasem. – Reactormonk

Odpowiedz

15

użyj long zamiast int.

public static long dateDifference(Date d1, Date d2){ 
    return (d2.getTime() - d1.getTime()); 
} 

getTime() zwraca long ponieważ wynik może być większy niż całkowita. Gdy rzucisz długą wartość większą niż Integer.MAX_VALUE na liczbę całkowitą, otrzymasz wartość overflow, a wartość może zmienić się na ujemną.