Java Timetask始终执行

Java Timetask始终执行,java,Java,我想在每个星期三的午夜运行我的代码 public class Autonom extends TimerTask { public static void main(String[] args) { Timer timer = new Timer(); Calendar data = Calendar.getInstance(); data.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); data.set(Calen

我想在每个星期三的午夜运行我的代码

public class Autonom extends TimerTask {

public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar data = Calendar.getInstance();
    data.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
    data.set(Calendar.HOUR_OF_DAY, 0);
    data.set(Calendar.MINUTE, 0);
    data.set(Calendar.SECOND, 0);
    data.set(Calendar.MILLISECOND, 0);
    timer.schedule(new Autonom(), data.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));

}

@Override
public void run() {
...
}

}

问题是,当我启动这段代码时,每次都会执行run方法。那么问题出在哪里呢?

您使用当前时间,并将其设置为周三午夜。因为我们今天是星期五,星期三已经过去了

从中,你可以看到在这种情况下会发生什么

如果计划的第一次是在过去,则计划立即执行

如果要等待下周三开始执行,请增加周数

data.add(Calendar.WEEK_OF_YEAR, 1);

这将是将来的一个日期,并将等待到那时开始第一次执行。

我想您还必须设置月份和年份字段,因为文档中说,如果时间点在过去,任务将被执行。如果我运行代码并打印
data.getTime()
我将得到以下输出,即2016年12月28日星期三00:00:00 CET,该日期为过去