【问题标题】:get date for next time at 1am获取下次凌晨 1 点的日期
【发布时间】:2010-11-17 13:42:29
【问题描述】:

为了运行后台服务,我想安排一个线程在每天凌晨 1 点运行。如何在 java 中获取这个日期?

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, HOUR_OF_EXECUTION);
Date date = cal.getTime();

没用。

【问题讨论】:

    标签: java date datetime calendar


    【解决方案1】:

    你应该去Quartz

    Timer timer = new Timer();
    final Callable c = callable;
    TimerTask task = new TimerTask() {
        public void run() {
                c.call();
        }
    }
    t.scheduleAtFixedRate(task, firstExecuteDate, 86400000); // every day  
    

    相应地给 firstExecuteDate 并且你的事情已经完成,接下来要执行 - 现在

    获取下午 1 点的下一个日期。

    Calendar cal  = Calendar.getInstance();
    Calendar calAtOne  = Calendar.getInstance();
    calAtOne.set(Calendar.HOUR_OF_DAY,13);
    calAtOne.set(Calendar.MINUTE,00);
    calAtOne.set(Calendar.SECOND,00);
    
    if(calAtOne.after(cal)){
        return calAtOne;
    }else{
        cal.add(Calendar.DATE,1);
        cal.set(Calendar.HOUR_OF_DAY,13);
        cal.set(Calendar.MINUTE,00);
        cal.set(Calendar.SECOND,00);
        return cal;
    }
    

    然后减去currentMillis - (nextExecDate returned By above code)

    【讨论】:

    • 我正在使用计时器。我想我可以使用'timer.scheduleAtFixedRate(...);'。这不可能吗?如果没有必要,我不想使用另一个库
    • @elCapitano 有可能,但我给出的解决方案更好,所以你想下次执行什么时候?如果是,您可以在启动计时器时获取日历实例并检查它是否超过下午 1 点,而不是添加 1 天并将时间设置为下午 1 点,否则将时间设置为下午 1 点。
    • 目前我以 24 小时为周期计时。我的问题是第一次执行必须在凌晨 1 点(因为由于工作量问题,所有时间段都必须在此时执行)。我只需要现在的 java.util.Date + x hours = 1am.
    • @elCapitano 您可以使用石英轻松配置它,然后您只需要在下一个下午 1 点做 - 现在
    • 谢谢!你的解决方案奏效了。目前我不能使用另一个库,但我会看看石英。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2011-01-27
    相关资源
    最近更新 更多