Разница между двумя датами с разными годами
Я хочу рассчитать разницу между двумя датами с разными годами, в секундах. Я делаю это так:
public static int dateDifference(Date d1, Date d2){
return (int) (d2.getTime() - d1.getTime());
}
Проблема заключается в том, что когда я запускаю это, например, для этих дат:
d1 = Tue Nov 17 14:18:20 GMT+01:00 2015
d2 = Fri Nov 28 15:37:50 GMT+02:00 2016
Я получаю -169191300
в результате.
Но когда эти годы одинаковы, я получаю правильный результат, 954959013
.
Может кто-нибудь объяснить, что здесь происходит?
Ответы
Ответ 1
используйте long
вместо int
.
public static long dateDifference(Date d1, Date d2){
return (d2.getTime() - d1.getTime());
}
getTime()
возвращает long
, потому что результат может быть больше целого. Когда вы накладываете длиннее Integer.MAX_VALUE
на целое число, вы получаете overflow и значение может стать отрицательным.