2
爲了運行一個後臺服務,我想爲每日凌晨1點運行一個線程。我怎樣才能在java中獲得這個日期?下次獲取日期在凌晨1點
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION);
Date date = cal.getTime();
沒有工作。
爲了運行一個後臺服務,我想爲每日凌晨1點運行一個線程。我怎樣才能在java中獲得這個日期?下次獲取日期在凌晨1點
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION);
Date date = cal.getTime();
沒有工作。
你應該去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)
我使用一個計時器,然後減去。我以爲我可以用'timer.scheduleAtFixedRate(...);'工作。這不可能嗎?我不想使用另一個庫,如果不是必要的 – elCapitano 2010-11-17 13:48:49
@elCapitano這是可能的,但我給出的解決方案更好,所以你希望下一次它會執行?如果是的話,你可以得到一個日曆的實例,當你開始計時器,並檢查它是否是過了下午1點,比添加1天和設置時間下午1點,否則設置時間下午1點。 – 2010-11-17 13:51:14
目前我開始定時器24小時。我的問題是第一次執行必須在凌晨1點(因爲所有時間段因爲工作量問題而必須在此時執行)。我只需要現在的+ x小時= 1am的java.util.Date。 – elCapitano 2010-11-17 13:57:36