2014-01-22 193 views
1

我計算分鐘差的兩個日期之間的時間以這種方式:返回奇怪的結果

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

請顯示一個簡短但完整的程序來演示問題。 –

回答

1

如果您嘗試除以60f * 1000,則會看到41的結果,因爲getTime()也考慮了毫秒,因爲您可以看到這些不是您的日期值中的零。

1

其四捨五入問題。長截斷小數,如果你想要確切的數字,你應該在這種情況下使用Double。

0

與Oracle解釋...

public long getTime() 

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

這是一個四捨五入的問題表示00:00:00 GMT毫秒數。如果你圍繞兩次'上下',你不會有任何問題,但如果兩者都不考慮,你的結果可能會變化1分鐘(你的最小細節)。我會使用類double而不是隻要@Nguyten勒說。