定义特定时间的日常任务



目前我使用Java计时器来重复一项任务,但目前,我只能指定每30秒一次的时间。。。通过使用

 Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
}
  }, 30 * 1000, 30 * 1000);

然而,我真正想要的是这种约束:
任务将每HH:MM运行一次,MM(分钟)=00,HH(小时)可以是10、15、19。。。
我希望我把问题描述得足够清楚,就像每个HH点一样,任务都会运行。
我发现如果我不在HH:00点启动计时器,并且间隔将设置为6000,那么就不可能使用计时器。我想每天用几次(像每小时一样)
非常感谢。

您可以用目标时间创建一个新的Date对象,然后将其转换为系统时间,并将其从System.currentTimeMillis()中减去,然后休眠那么多毫秒

如:

Date alarm = DateFormat.parse(___your date here___);
long msToSleep = alarm.getTime() - System.currentTimeMillis();
// Your provided code to sleep for msToSleep ms
You can use below code to run TimerTask every hours HH:00:-
Timer timer = new Timer();
        Calendar cd = Calendar.getInstance();
        Date dt = cd.getTime();
        long mmss = dt.getMinutes() * 60 + dt.getSeconds();
        long remTime = 60 * 60 * 60 - mmss;
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
            }
        }, remTime * 1000, 60*60 * 60 * 1000);

您可以通过Calendar定义Timer的开始时间。计时器将在Calendar时间启动,

  Calendar today = Calendar.getInstance();
  Calendar startCal = Calendar.getInstance();
    startCal.set(today.get(Calendar.YEAR),today.get(Calendar.MONTH),
          today.get(Calendar.DAY_OF_MONTH), today.get(Calendar.HOUR),
                             00);
                              |_ Here set the start minutes at 00
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            System.out.println("beep");
        }
    }, startCal.getTime(), 30 * 1000);
         |
         |_ It will start on every 00 minutes of 

您可以这样做:

private static final int SLEEP_TIME=1000;//your sleep time (mili second)
public void Routine(){
    while(true){
        try {
            //your code goes here
            Thread.sleep(SLEEP_TIME);
            if(someCondition)
               break;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

最新更新