Java 日期之间的差异返回奇怪的结果

Java 日期之间的差异返回奇怪的结果,java,Java,我用这种方法计算两个约会时间之间的分钟差: long diff = time2.getTime() - time1.getTime(); return diff / (60 * 1000); 出于奇怪的原因,它返回的分钟数低于预期 例如,2014-01-22 18:45:00和2014-01-22 18:03:00之间的差异是41分钟,而它应该是42分钟 原因是什么?如何修复它 编辑 调试器显示date1为“2014-01-22 18:45:00.0”,date2为“Wed Jan 22 1

我用这种方法计算两个约会时间之间的分钟差:

long diff = time2.getTime() - time1.getTime();

return diff / (60 * 1000);
出于奇怪的原因,它返回的分钟数低于预期

例如,
2014-01-22 18:45:00
2014-01-22 18:03:00
之间的差异是
41分钟
,而它应该是
42分钟

原因是什么?如何修复它

编辑


调试器显示date1为“2014-01-22 18:45:00.0”,date2为“Wed Jan 22 18:03:31 GMT 2014”。我不知道为什么它会显示不同的语法。

如果你尝试除以
60f*1000
,你会看到结果是41。这是因为
getTime()
也考虑了毫秒,正如你所看到的,这些不是日期值中的零。

它的舍入问题。Long截断十进制数,如果需要确切的数字,则在这种情况下应使用Double

就像甲骨文解释的那样

public long getTime()
返回此日期表示的自1970年1月1日00:00:00 GMT以来的毫秒数


这是一个取整问题。如果你四舍五入两次(上限或下限),你不会有任何问题,但如果没有,两次都会考虑ms,结果可能会变化1分钟(你的最小细节)。我会使用类
double
,而不是像Le说的那么长。

时间1和
time2
的确切值是多少?可能是四舍五入-被截断的秒数。请展示一个简短但完整的程序来演示这个问题。@Zouzu,好吧,这就是所有问题的答案!:-)@DavidWallace只是想说,这段代码不足以回答以下问题:-)