我想知道我是否可以不断检查今天的日期与未来的日期相匹配。例如,如果将来设定的日期是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()方法还没有完成)
答案 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秒或您需要传递给计时器的任何时间单位)。设置该持续时间的时间表并提供回调函数。