我想在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日运行。
修改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(本月的第一个星期日)。
答案 0 :(得分:0)
根据Quartz Javadoc,只有一个'#'表达式允许用于星期几字段:
如果'#'使用了字符,在星期几字段中只能有一个表达式(" 3#1,6#3"无效,因为有两个表达式。)
参考:http://quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html