Подтвердить что ты не робот

Разница между двумя датами с разными годами

Я хочу рассчитать разницу между двумя датами с разными годами, в секундах. Я делаю это так:

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.

Может кто-нибудь объяснить, что здесь происходит?

4b9b3361

Ответ 1

используйте long вместо int.

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

getTime() возвращает long, потому что результат может быть больше целого. Когда вы накладываете длиннее Integer.MAX_VALUE на целое число, вы получаете overflow и значение может стать отрицательным.