不断检查日期的变化

时间:2015-01-05 19:55:38

标签: java

我想知道我是否可以不断检查今天的日期与未来的日期相匹配。例如,如果将来设定的日期是2015年1月8日,而今天的日期是2015年1月7日。有没有办法在今天的日期变为2015年1月8日时自动继续检查(与将来设置的日期相匹配)。

我正在考虑使用while(true)循环,但它感觉不对,因为循环永远不会结束。我怎么能这样做?

编辑:基于一些在线研究并在此回答我这样做了。

Calendar cal2 = Calendar.getInstance();
    cal2.add(Calendar.DAY_OF_MONTH, 1);
    Date date = cal2.getTime();
    System.out.print(cal2.getTime().toString());
    Timer t = new Timer();
    t.schedule(new TimerTask() {
        public void run() {
            for (int i = 1; i < 1000; i++) {
                if (shelf.book[i] != null && shelf.book[i].overdue == true) {

                }
            }

        }
    }, date);

注意:我还没有测试过它。 (此外,run()方法还没有完成)

3 个答案:

答案 0 :(得分:2)

对于一次性调度,一个简单的解决方案是使用Timer。

import java.util.*;
import java.text.*;

public class ScheduleTask {

   private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

   private static Timer timer = new Timer();

   private static class MyTimeTask extends TimerTask {
      public void run() {
         System.out.println("HOHO date just changed");
      }
   }

   public static void main(String[] args) throws ParseException {

      System.out.println("Current Time: " + df.format( new Date()));

      //Date and time at which you want to execute
      Date date = df.parse("2015-01-08 00:00:00");

      timer.schedule(new MyTimeTask(), date);
   }
}

答案 1 :(得分:1)

不要主动检查,而是使用将来执行Runnable的{​​{3}}:

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
long delay = dateInFuture.getTime() - new Date().getTime();
ses.schedule(new Runnable(){
    @Override
    public void run() {
        // do some work
    }
}, delay, TimeUnit.MILLISECONDS);

答案 2 :(得分:1)

忙碌的等待(即轮询)通常是一个坏主意,因为它浪费资源。在这种特定情况下,不需要轮询,因为您知道当前日期时间以及要触发的未来日期时间。计算时间差并使用计时器在必要的时间运行代码。 Java timer class

例如,让我们说当前时间是1月7日下午4点。你想在1月8日上午12点触发。时差为8小时(28800秒或您需要传递给计时器的任何时间单位)。设置该持续时间的时间表并提供回调函数。