Cron表达没有给出正确的日期?

时间:2014-10-03 05:15:52

标签: java quartz-scheduler cronexpression

我想在12月第一周的每一天都有一份cron工作。

但我的cron工作却在12月的第二周运行。

以下是代码

import java.text.ParseException;
import java.util.Date;

import org.quartz.CronExpression;

public class CronExpressionTest{

    public static void main(String[] args) throws ParseException {
        String expression = "0 0 0 ? 12 2#1,3#1,4#1,5#1,6#1,7#1,1#1 *";
        CronExpression cronExpression = new CronExpression(expression);
        Date date = cronExpression.getNextValidTimeAfter(new Date());
        System.out.println(date);
    }
}

如果你看到下面的日历,工作应该是12月1日首次,但它将在12月7日运行。

enter image description here

修改1:

看起来cron周从第一个星期日开始,而不是从一个月的第一天开始。

编辑2: -

显然cron表达“0 0 0?12 2#1,3#1,4#1,5#1,6#1,7#1 *”从12月1日开始正确,但是“0 0 0? 12 2#1,3#1,4#1,5#1,6#1,7#1,1#1 *“从12月7日开始,因为我添加了1#1(本月的第一个星期日)。

1 个答案:

答案 0 :(得分:0)

根据Quartz Javadoc,只有一个'#'表达式允许用于星期几字段:

  

如果'#'使用了字符,在星期几字段中只能有一个表达式(" 3#1,6#3"无效,因为有两个表达式。)

参考:http://quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html