不同年份的两个日期之间的差异

use*_*446 11 java time date

我想计算不同年份的2个日期之间的差异,以秒为单位.我是这样做的:

public static int dateDifference(Date d1, Date d2){
    return (int) (d2.getTime() - d1.getTime());
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我为这些日期运行时:

d1 = Tue Nov 17 14:18:20 GMT+01:00 2015
d2 = Fri Nov 28 15:37:50 GMT+02:00 2016
Run Code Online (Sandbox Code Playgroud)

我得到-169191300了结果.

但是当年份相同时,我得到了正确的结果,954959013.

有人能解释一下这里发生了什么吗?

Sim*_*ant 15

用一个long而不是一个int.

public static long dateDifference(Date d1, Date d2){
    return (d2.getTime() - d1.getTime());
}
Run Code Online (Sandbox Code Playgroud)

getTime()返回a,long因为结果可能大于整数.当您将长Integer.MAX_VALUE整数转换为整数时,会出现溢出,并且该值可能会变为负值.