others - java.lang.'4 27 11? 8? 2014': CronExpression无效,

这是我生成Cron表达式的代码:


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);
 }
}

时间:

cron表达式中的'?'意思是允许每月的某天和一周中的某几天不互相干扰(例如,因此您可以指定cron在任意星期五触发,而不考虑月份或每月的13号(无论是哪一天)。

比如,今天的2014年09月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));
}

  1. Date.getDate()Date.getHours()等等已过时你应该改用Calendar.get,我保留了OP中的当前代码,以便使解决方案变得清晰,并且不添加额外的细节,
  2. Date.getMonth() (新的推荐方法Calendar.get (Calendar.MONTH ) )返回月(一月e.g是0二月是1等等)的从零开始的表示形式,而cron表达式是基于(e.g,一月是1,二月是2,等等)的,因此应该为cron添加。

...