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,该日期为过去