2010-08-10 171 views
12

當毫秒存儲爲「長」時,我正在尋找將毫秒添加到Java日期的最佳方法。 Java日曆有一個函數,但它只需要一個'int'作爲金額。當毫秒數很長時,將毫秒添加到Java日期

這是一個解決方案,我有一個提議......

Calendar now = Calendar.getInstance(); 
Calendar timeout = Calendar.getInstance(); 

timeout.setTime(token.getCreatedOn()); 
timeout.setTimeInMillis(timeout.getTimeInMillis() + token.getExpiresIn()); 

任何其他建議?

回答

18

您的解決方案實際上看起來好像差不多。我最初發布的答案是通過Date,當時我沒有正確考慮getTimeInMillissetTimeInMillis

但是,您打電話給setTime,然後setTimeInMillis這對我來說似乎有點多餘。你的代碼看起來相同的:

Calendar timeout = Calendar.getInstance(); 
timeout.setTimeInMillis(token.getCreatedOn().getTime() + token.getExpiresIn()); 

一個普遍更好的替代辦法是使用Joda Time雖然:)這通常是一個更好的日期/時間API。

+0

我在一些實現中使用calendar.getInstance(),但不得不放棄它,因爲如果Date帶有TimeZones,日曆將會打破它。 – will824 2013-12-21 21:53:40

+0

@ will824:我完全不理解你的評論 - '日期'*從不*具有與之相關的時區。從Unix紀元開始,它總是*毫秒。 – 2013-12-22 08:45:43

+0

@Jon其實它應該如你所說,但如果你檢查Date對象,它總是帶有某種時區。似乎Java在Date操作方面有很多問題(這就是爲什麼Joda出生的原因),這就是其中之一。這就是爲什麼我不能使用日曆來解決我的問題,而是不得不解決Joda毫米操作的原因。當然,我的問題是非常具體的,並且與從1970年1月1日通過的應該是0的總秒數有關,但由於時區,我收到了一個負數。在我的情況下使用日曆會減少1小時:( – will824 2014-01-02 23:09:32

12

可以AO創建與當前本地日期,你需要添加一個日期加上毫秒的數量爲到期時間

import java.util.Date; 

long expiremilis = 60000l; // 1 minute 
// Expires in one minute from now 
Date expireDate = new Date(System.currentTimeMillis() + expiremilis); 

,或具有日曆相同

long expiremilis = 60000l; // 1 minute 
Calendar expireDate= Calendar.getInstance(); 
// Expires on one minute from now 
expireDate.setTimeInMillis(System.currentTimeMillis() + expiremilis); 

如果使用您可以執行的現有日期對象:

import java.util.Date; 

long expiremilis = 60000l; // 1 minute 
// Expires on one minute from the date object date 
Date expireDate = new Date(myDate.getTime() + expiremilis); 

並且與現有日曆對象

long expiremilis = 60000l; // 1 minute 
Calendar expireDate= Calendar.getInstance(); 
// Expires on one minute from the calendar date 
expireDate.setTimeInMillis(myCalendar.getTimeInMillis() + expiremilis); 
0

日曆是一個相當昂貴的日期對象,它的功能不是最好的。如果你想要一個全功能的日期對象,我建議看看JODA Time,它有一個你想要的功能。

但是,更簡單的Java Date對象是@Dubas指示的Date類。

對於您正在執行的操作類型,更簡單的方法是使用長整型。這也快得多。

long timeoutMS = token.getCreatedOn() + token.getExpiresIn(); 

我用長時間(GMT)爲我所有的日期和表示層只使用日期。即。當你想將日期轉換爲文本。