Quartz cron计划输出不如预期

时间:2012-08-29 11:31:01

标签: java cron quartz-scheduler

我想在工作日(星期一 - 星期五)23:59:59安排每日工作。

我使用这个cron表达式

“59 59 23?* MON-FRI”,

但输出有星期一的肚子值

8月29日星期三23:59:59 ICT 2012
ICT 8月8日星期四23:59:59 2008年8月31日星期五23:59:59 ICT 2012
Mon Sep 03 23:59:59 ICT 2012
ICT Sep 2012年9月3日星期一23:59:59 星期一03月23日23:59:59 ICT 2012

Tue Sep 04 23:59:59 ICT 2012
3月5日星期三23:59:59 ICT 2012
星期四06月23日23:59:59 ICT 2012
周五7月07日23:59:59 ICT 2012年

是表达错误吗?需要帮助。

我通过特定日期循环获取此输出,这里是代码

`try {
    CronExpression ce = new CronExpression(59 59 23 ? * MON-FRI);

    Calendar start = Calendar.getInstance();
    start.setTime(new Date());

    Calendar end = Calendar.getInstance();
    Date endDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse("Fri Sep 29 23:59:59 ICT 2012");
            end.setTime(endDate);

    for (; !start.after(endDate); start.add(Calendar.DATE, 1)) {
       Date current = start.getTime();

         System.out.println(ce.getNextValidTimeAfter(current));

     }
 } catch (ParseException ex) {
            Logger.getLogger(HelloJob.class.getName()).log(Level.SEVERE, null, ex);
        }

}`

1 个答案:

答案 0 :(得分:2)

问题不在你的规则或Quartz中,没关系,你可以使用它。

问题在于您的测试代码。

for (; !start.after(endDate); start.add(Calendar.DATE, 1)) {
     Date current = start.getTime();
     System.out.println(ce.getNextValidTimeAfter(current));
}

您不是在有效日期上进行迭代,而是在startDateendDate之间的所有日期进行迭代。

对于无效天也调用循环内容,对于这2个无效天中的每一天,当前日期之后的“下一个有效时间”是星期一。所以星期一你有三次,这是完全合乎逻辑的。

因此你的日志。