4

Java Timer と TimerTask を使用して、毎日夕方 5 時にジョブを実行したいと考えています。この問題を解決するのを手伝ってください。

私が思うに、以下の方法に問題があります...

schedule(TimerTask task, Date time)

----日付指定は初日のみ可能で、近日指定不可。

schedule(TimerTask task, Date firstTime, long period)

----最初の開始時間と、それが実行されるまでの時間を指定できます。ここで、最初にスケジューラを夕方 4 時に開始した場合、次の実行時間について言及する方法を示します。1 時間の遅延を設定すると、1 時間ごとに呼び出されます。

schedule(TimerTask task, long delay)

-- これは、開始時間に基づいて処理を行うものには適用されません。

schedule(TimerTask task, long delay, long period)

-- これは、開始時間に基づいて処理を行うものには適用されません。

4

3 に答える 3

4

非常に軽量で使いやすいクォーツCronトリガーに切り替えることをお勧めします

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 に答える