【发布时间】:2010-11-17 13:42:29
【问题描述】:
为了运行后台服务,我想安排一个线程在每天凌晨 1 点运行。如何在 java 中获取这个日期?
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION);
Date date = cal.getTime();
没用。
【问题讨论】:
标签: java date datetime calendar
为了运行后台服务,我想安排一个线程在每天凌晨 1 点运行。如何在 java 中获取这个日期?
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION);
Date date = cal.getTime();
没用。
【问题讨论】:
标签: java date datetime calendar
你应该去Quartz。
或
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)
【讨论】: