2015-11-17 19 views
11

Ich möchte den Unterschied zwischen 2 Daten mit unterschiedlichen Jahren in Sekunden berechnen. Ich mache es wie folgt aus:Unterschied zwischen zwei Daten mit unterschiedlichen Jahren

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

Das Problem ist, dass, wenn ich das für diesen Zeitraum zum Beispiel laufen:

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

ich -169191300 als Ergebnis erhalten. Wenn die Jahre gleich sind, bekomme ich das richtige Ergebnis, 954959013.

Kann jemand erklären, was hier passiert?

+0

Ich empfehle, in java 8 nach [joda-time] (http://www.joda.org/joda-time/) oder 'java.time' zu ​​suchen, um zeitbezogene Operationen durchzuführen. – Reactormonk

Antwort

15

Verwenden Sie eine long anstelle einer int.

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

getTime() gibt eine long weil das Ergebnis größer als eine ganze Zahl sein kann. Wenn Sie eine lange Zahl größer als Integer.MAX_VALUE in eine Ganzzahl umwandeln, erhalten Sie eine overflow und der Wert kann negativ werden.

Verwandte Themen