我想计算不同年份的2个日期之间的差异,以秒为单位。我是这样做的:
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
。
有人能解释一下这里发生了什么吗?
答案 0 :(得分:15)
使用long
代替int
。
public static long dateDifference(Date d1, Date d2){
return (d2.getTime() - d1.getTime());
}
getTime()
返回long
,因为结果可能大于整数。当您将大于Integer.MAX_VALUE
的长整数转换为整数时,您会获得overflow,并且该值可能会变为负数。