3

我想仅在工作日(周一至周五)的 23:59:59 安排日常工作。

我使用这个 cron 表达式

“59 59 23 ? * 周一至周五”,

但是周一的输出值不高

周三 8 月 29 日 23:59:59 ICT 2012
周四 8 月 30 日 23:59:59 ICT 2012
周五 8 月 31 日 23:59:59 ICT 2012
周一 9 月 3日 23:59:59 ICT 2012 周一 9
月 3 日 23:59:59 ICT 2012 2012 年 9
月 3 日星期一 23:59:59 ICT 2012

9 月 04 日星期二 23:59:59 2012 年9 月 5 日
星期三 23:59:59 ICT 2012 年9 月 6 日
星期四 23:59:59 ICT 2012
9 月 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);
        }

}`
4

1 回答 1

2

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

问题出在您的测试代码中。

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

您不是在有效日期上迭代,而是在startDate和之间的所有日子endDate

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

因此你的日志。

于 2012-08-29T12:09:17.577 回答