4

我想每天晚上 5 点使用 Java Timer 和 TimerTask 做作业。请帮我解决这个问题。

我认为以下方法存在问题...

schedule(TimerTask task, Date time)

----日期可以指定为第一天,但​​不能指定未来几天。

schedule(TimerTask task, Date firstTime, long period)

----可以给出初始开始时间和执行多长时间,这里如果我在晚上 4 点开始我的调度程序,那么如何提及下一个执行时间。如果我设置 1 小时延迟,它将每隔一小时调用一次。

schedule(TimerTask task, long delay)

--这不适用,它将根据开始时间做事。

schedule(TimerTask task, long delay, long period)

--这不适用,它将根据开始时间做事。

4

3 回答 3

4

我建议您改用Quartz Cron Trigger,它非常轻巧且易于使用

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
//Job1 is scheduled to run everyday evening at 5 O' clock

JobDetail job = newJob(SimpleJob.class)
    .withIdentity("job1", "group1")
    .build();

CronTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .withSchedule(cronSchedule("0 0 17 * * ?"))
    .build();

sched.scheduleJob(job, trigger);
于 2013-01-22T10:17:01.720 回答
1

尝试

    Calendar c = Calendar.getInstance();
    c.clear(Calendar.MILLISECOND);
    c.clear(Calendar.MINUTE);
    c.clear(Calendar.SECOND);
    if (c.get(Calendar.HOUR_OF_DAY) > 17) {
        c.add(Calendar.DATE, 1);
    }
    c.set(Calendar.HOUR_OF_DAY, 17);
    Date firstTime = c.getTime();
    new Timer().scheduleAtFixedRate(task, firstTime, 24 * 3600 * 1000);
于 2013-01-22T10:33:32.937 回答
1

好吧,更合适的答案是 Grooveek 的答案,但作为替代

import java.awt.Toolkit;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class demo 
{
  Toolkit toolkit;
  Timer timer;
  public demo()
  {
    toolkit = Toolkit.getDefaultToolkit();
    timer = new Timer();
    timer.schedule(new scheduleDailyTask(), 0, //initial delay
        1 * 1000); //subsequent rate
  }
  class scheduleDailyTask extends TimerTask 
  {
    public void run() 
    {
      Date date = new Date();
      if(date.getHours()==5 && date.getMinutes()==0 && date.getSeconds()==0)
      {
          System.out.println("its 5 O clock");
          System.out.println("run the daily schedule method now");
      }
    }
  }
  public static void main(String args[]) {
    new demo();
  }
}
于 2013-01-22T10:50:22.047 回答