等待具体日期。日历Java代码优化

时间:2011-07-21 09:32:15

标签: java time calendar compare

我想在特定的给定时间使用Java 执行任务。我的代码有效,但看起来不太好。我正在比较两个字符串。我尝试使用getTimeInMills()比较日期,但数字不一样。

这是我的代码:

import java.util.Calendar;

class Voter {
Calendar current,deadline;
boolean keepGoing = true;

public static void main(String[] args) {
    Voter strzal = new Voter();
    strzal.shoot();
}

public void shoot() {
    deadline = Calendar.getInstance();
    deadline.set(2011,6,21,11,20,00);

    while (keepGoing) {
        // wait 1 second
        try {
            Thread.sleep(1000);
            System.out.print(".");
        } catch (InterruptedException ex) { ex.printStackTrace(); }

        current = Calendar.getInstance();

        if (deadline.getTime().toString().equals(current.getTime().toString())) {
            System.out.println("Got it!");
            keepGoing = false;
        } // end of if
    } // end of while
} // end of shoot() method

}

我正在循环中运行,等待当前时间等于截止日期(例如我将其设置为2011年7月21日上午11:10)。

如何改进我的代码?我想使用Calendar类中的compareTo()或getTimeInMills()方法,但我无法正确设置截止日期。

提前致谢。

3 个答案:

答案 0 :(得分:4)

使用ScheduledExecutorService为您管理,而不是睡觉并等待合适的时间。 schedule方法听起来就像你需要的那样。

答案 1 :(得分:3)

使用ScheduledExecutorService是一个更好的建议,但是为了您的知识

Calendar deadline = Calendar.getInstance();
deadline.set(2011,6,21,11,20,00);
long endTime = deadline.getTime().getTime();

// later
long current = System.currentTimeMillis();
if (current >= endTime) {
    System.out.println("Got it!");
    break;
}

答案 2 :(得分:2)

不要重新发明轮子!有一个JDK类 - ScheduledThreadPoolExecutor。以下是一行代码:

new ScheduledThreadPoolExecutor(1).schedule(new Runnable() {
    public void run() {
        // Do something
    }
}, 1, TimeUnit.HOURS);

此示例等待1小时,但您可以用这么多秒或任何您需要的内容替换它。

完成工作。