2011-01-05 91 views
4

我需要快速實現要包含在事件管理系統中的「日期跳轉」算法。
觸發事件並將日期(在同步的方法中)設置爲下一個第10分鐘。Java日期跳轉到下一個第10分鐘

例如

Event occurs at "2010-01-05 13:10:12" and sets the 
    next date to be "2010-01-05 13:20:00" 

,如果在第10分鐘,正是(據說)發生的事件,下一個必須設置

Event occurs at "2010-01-05 13:30:00" and sets the 
    next date to be "2010-01-05 13:40:00" 

(不可能的,因爲日起下降到1 /千分之一秒,但以防萬一......)。

我的第一個想法是獲取當前的Date(),並通過getTime()方法直接使用ms,通過整數(長)除法,如((time/10mn)+1)*10mn

由於它是快速,也可靠,我想我會問我的同胞OSers之前執行。

+0

重複:[如何在java中將時間舍入到最近的四分之一小時?](http://stackoverflow.com/q/3553964/642706) – 2016-09-02 23:13:04

回答

9

您可以使用/我的回答適應一個非常類似的問題:

How to round time to the nearest quarter in java?

事情是這樣的:

int unroundedMinutes = calendar.get(Calendar.MINUTE); 
int mod = unroundedMinutes % 10; 
calendar.add(Calendar.MINUTE, mod == 0 ? 10 : 10 - mod); 
calendar.set(Calendar.SECOND, 0); 
calendar.set(Calendar.MILLISECOND, 0); 
+0

在速度方面,Calendar如何分配和add()方法執行比較'getTime()'和'/'? (需要很快) – 2011-01-05 17:59:02

0

你在毫秒時代時間不會任意工作方法時區,因爲有些時區的GMT偏離N * 15分鐘。在這些時區內,您的代碼會將間隔5-14移至15,15-24至25等等。

在GregorianCalendar類中操作適當的字段時,實際測試過性能,並得出結論認爲性能不足,或者您是否試圖重新發明輪子以滿足其樂趣?

+0

我希望你根據我的要求給我一個建議。 – 2011-01-05 18:02:10

+1

那麼,你的方法顯然不可靠。除非您指定「快速」的確切含義,讓我可以訪問您的生產硬件以獲得基準並支付我的工作費用,否則無法知道日曆方法是否滿足您的其他要求(快速)。或者,你當然可以花五分鐘時間來檢查它是否足夠快? – jarnbjo 2011-01-05 18:06:00