我使用 java 创建了时区特定的计划任务事件。我的代码如下。
Timer timer = new Timer();
Calendar date = Calendar.getInstance(TimeZone.getTimeZone("Asia/Colombo"));
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("Runs everday morning 12.00 AM");
}
}, date.getTime(), 1000 * 60 * 60 * 24);
但问题是,当调用此方法时,它很快就会运行此任务。我需要每天 12:00 在亚洲/科伦坡时区运行此作业。如何做到这一点?
最佳答案
您将第一次执行安排在过去(当天午夜),因此您的任务将立即执行。
根据javadoc :
[...] if the scheduled first time is in the past, it is scheduled for immediate execution.
解决此问题的最简单方法是在计划的首次执行时间上添加 1 天:
date.add(Calendar.DATE, 1);
<小时/>
此外,您可能希望将此任务的执行安排为固定速率,而不是固定延迟。如果不这样做,您的任务将每天稍后执行,具体取决于完成任务所需的实际时间。再次参见javadoc了解详情。
关于java - 使用定时器在java中安排任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838110/