0

我需要在每天早上 8 点和晚上 8 点运行一个方法,因为这种想法与 Java 计时器有关。如何为这种情况设置计时器。

4

4 回答 4

2

使用 Timer 类。

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 8);
    Timer timer = new Timer();
    timer.schedule(new RemindTask(), calendar.getTime());

    class RemindTask extends TimerTask {

       public void run() {
       } 
    }

在类似的行中,您也可以为晚上时间创建另一个计时器。另一种选择是使用单一计时器,开始时间是早上 8 点,间隔时间是 12 小时。

您还可以使用其他库进行调度,例如Quartz Scheduler

于 2013-04-11T04:28:46.190 回答
1

有很多库可以满足您的需求,以cron4j为例。

于 2013-04-11T04:28:30.310 回答
1

您可以使用如下函数定期检查时间:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class currentTime {

    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println( sdf.format(cal.getTime()) );
    }

}

所以有一个计数器,每 x 次迭代运行一次。

于 2013-04-11T04:29:27.393 回答
1

您可以安排 TimerTask 在每小时的顶部运行,并在 Calendar 的帮助下检查它是否为 8

    long hour = 3600 * 1000;
    new Timer().scheduleAtFixedRate(new TimerTask() {
        public void run() {
            if (Calendar.getInstance().get(Calendar.HOUR) == 8) {
                // run
            }
        }
    }, new Date(System.currentTimeMillis() / hour * hour), hour);

即使切换到夏令时,它也会在 8 点运行

于 2013-04-11T04:40:07.893 回答