使用Timer在Java中安排任务

时间:2014-11-10 06:38:03

标签: java timer timezone scheduled-tasks

我使用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。怎么做?

1 个答案:

答案 0 :(得分:1)

您计划在过去(当天午夜)执行首次执行,因此您的任务将立即执行。

根据javadoc

  

[...]如果计划的第一次是在过去,则会安排立即执行。

解决此问题的最简单方法是在预定的首次执行时间内添加1天:

date.add(Calendar.DATE, 1);

此外,您可能希望将此任务的执行安排为固定费率,而不是固定延迟。如果不这样做,您的任务将在每天稍后执行,具体取决于完成任务所需的实际时间。再次,请参阅javadoc了解详情。