2010-11-17 81 views
2

爲了運行一個後臺服務,我想爲每日凌晨1點運行一個線程。我怎樣才能在java中獲得這個日期?下次獲取日期在凌晨1點

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION); 
Date date = cal.getTime(); 

沒有工作。

回答

5

你應該去Quartz

OR

Timer timer = new Timer(); 
final Callable c = callable; 
TimerTask task = new TimerTask() { 
    public void run() { 
      c.call(); 
    } 
} 
t.scheduleAtFixedRate(task, firstExecuteDate, 86400000); // every day 

因此給firstExecuteDate和你的事情做,更在獲得下一個執行 - 現在

爲了得到下一個日期時間下午1點。

Calendar cal = Calendar.getInstance(); 
Calendar calAtOne = Calendar.getInstance(); 
calAtOne.set(Calendar.HOUR_OF_DAY,13); 
calAtOne.set(Calendar.MINUTE,00); 
calAtOne.set(Calendar.SECOND,00); 

if(calAtOne.after(cal)){ 
    return calAtOne; 
}else{ 
    cal.add(Calendar.DATE,1); 
    cal.set(Calendar.HOUR_OF_DAY,13); 
    cal.set(Calendar.MINUTE,00); 
    cal.set(Calendar.SECOND,00); 
    return cal; 
} 

currentMillis - (nextExecDate returned By above code)

+0

我使用一個計時器,然後減去。我以爲我可以用'timer.scheduleAtFixedRate(...);'工作。這不可能嗎?我不想使用另一個庫,如果不是必要的 – elCapitano 2010-11-17 13:48:49

+0

@elCapitano這是可能的,但我給出的解決方案更好,所以你希望下一次它會執行?如果是的話,你可以得到一個日曆的實例,當你開始計時器,並檢查它是否是過了下午1點,比添加1天和設置時間下午1點,否則設置時間下午1點。 – 2010-11-17 13:51:14

+0

目前我開始定時器24小時。我的問題是第一次執行必須在凌晨1點(因爲所有時間段因爲工作量問題而必須在此時執行)。我只需要現在的+ x小時= 1am的java.util.Date。 – elCapitano 2010-11-17 13:57:36

相關問題