返回奇怪的结果

问题描述:

我计算分钟差的两个日期之间的时间以这种方式:返回奇怪的结果

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

return diff/(60 * 1000); 

对于它返回比预期更低的分钟数的奇怪的理由。

例如2014-01-22 18:45:002014-01-22 18:03:00之间的区别是41 minutes当它应该是42 minutes

是什么原因?如何解决它?

编辑

调试器显示 “2014年1月22日18:45:00.0” 的日期1和 “周三1月22日18时03分31秒格林尼治标准时间2014” 的日期2。我不知道它为什么显示不同的语法。

+1

'time1'和'time2'的确切值是多少? –

+3

可能舍入 - 被截断的秒数的小数部分。 – duffymo

+3

请显示一个简短但完整的程序来演示问题。 –

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

其四舍五入问题。长截断小数,如果你想要确切的数字,你应该在这种情况下使用Double。

与Oracle解释...

public long getTime() 

返回自1970年1月1日,该日期

这是一个四舍五入的问题表示00:00:00 GMT毫秒数。如果你围绕两次'上下',你不会有任何问题,但如果两者都不考虑,你的结果可能会变化1分钟(你的最小细节)。我会使用类double而不是只要@Nguyten勒说。