将此作为无效的CronExpression,无法找出原因
Refferred http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
这就是我生成Cron Expression的方式:
public class sample {
/**
* @param args
*/
public static void main(String[] args) {
Date date = new Date();
String formatted_date = generateCronExpression(Integer.toString(date.getSeconds()),Integer.toString(date.getMinutes()),
Integer.toString(date.getHours()), "?", Integer.toString(date.getMonth()), "?", Integer.toString(date.getYear()+1900));
}
private static String generateCronExpression(final String seconds,final String minutes, final String hours, final String dayOfMonth, final String month, final String dayOfWeek, final String year) {
return String.format("%1$s %2$s %3$s %4$s %5$s %6$s %7$s", seconds,minutes, hours, dayOfMonth, month, dayOfWeek, year);
}
}
答案 0 :(得分:3)
''在cron表达式中意味着允许日期和星期几不相互干扰(例如,因此您可以指定在任何星期五触发的cron,无论该月的哪一天或13日每个月,不管是哪一天)。如果你指定它们都是'?'你没有任何日期规范,这是非法的。
当前日期的cron表达式将使用该月中的某天,并忽略星期几。例如,对于今天,2014年9月15日,您指定4 27 11 15 9 ? 2014
。
这可以通过从java Date
对象中提取当前日期来生成:
public static void main(String[] args) {
Date date = new Date();
String formatted_date = generateCronExpression
(Integer.toString(date.getSeconds()),
Integer.toString(date.getMinutes()),
Integer.toString(date.getHours()),
Integer.toString(date.getDate()),
Integer.toString(date.getMonth() + 1), // see Note #2
"?",
Integer.toString(date.getYear() + 1900));
}
说明:
Date.getDate()
,Date.getHours()
等已弃用 - 您应该使用Calendar.get
代替。我保留了OP中的当前代码,以便使解决方案清晰,而不是添加额外细节的混乱。Date.getMonth()
(以及新建议的方法Calendar.get(Calendar.MONTH)
)返回月份的从零开始的表示(例如,1月为0,2月为1等),而cron表达式为1基于(例如,1月是1,2月是2等) - 所以你应该为cron表达式添加1。