日期:2014-05-20  浏览次数:20649 次

求解答
public class TimerManager {
 

 //时间间隔
  private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
  
  public TimerManager() {
  Calendar calendar = Calendar.getInstance();  
   
  /*** 定制每日2:00执行方法 ***/ 
 

  calendar.set(Calendar.HOUR_OF_DAY, 2);
  calendar.set(Calendar.MINUTE, 0);
  calendar.set(Calendar.SECOND, 0);
   
  Date date=calendar.getTime(); //第一次执行定时任务的时间
   
  //如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
} //为什么 时间比当前时间的时候加一天 而不是执行的时间大于 当前的时间 加一天呢??
   
  
  Timer timer = new Timer();
   
  NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
  //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
  timer.schedule(task,date,PERIOD_DAY);
  }
 

 // 增加或减少天数
  public Date addDay(Date date, int num) {
  Calendar startDT = Calendar.getInstance();
  startDT.setTime(date);
  startDT.add(Calendar.DAY_OF_MONTH, num);
  return startDT.getTime();
  }
  
 }
红色字体部分

------解决方案--------------------
探讨
引用:
这是啥问题?
如果当前时间大于执行定时任务的时间说明该任务已经执行过了。
加一天,修改执行时间。开启新的任务,执行明天的任务。
你执行时间小于你当前时间 又何必再加一天呢