1、Cron表达式解析-工具类
1、需引入依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency>2、Demo: public class CronAnalyzeUtil { /** * 调度表达式解析 * @param expression 调度cron表达式 * @return */ public static String cronAnalyze(String expression){ CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(expression); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = cronSequenceGenerator.next(new Date()); } catch (Exception e) { e.printStackTrace(); } String str = null; if (date != null) { str = sdf.format(date); } return str; } /** * 通过cron获取时间 * @param cronExpression cron表达式 * @param numTimes 下一(几)次运行的时间 * @param format 时间格式 * @return */ public static List<String> getNextExecTime(String cronExpression,Integer numTimes,String format) { List<String> list = new ArrayList<>(); CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); try { cronTriggerImpl.setCronExpression(cronExpression); } catch(ParseException e) { e.printStackTrace(); } List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes); SimpleDateFormat dateFormat = new SimpleDateFormat(format); for (Date date : dates) { list.add(dateFormat.format(date)); } return list; } /** * 获取调度时间频率 * @param cronExpression * @param format * @return */ public static int scheduleTimeRate(String cronExpression,String format){ List<String> nextExecTime = CronAnalyzeUtil.getNextExecTime(cronExpression, 2, format); Integer value0 = Integer.valueOf(nextExecTime.get(0)); Integer value1 = Integer.valueOf(nextExecTime.get(1)); return value1-value0; } }
1.1、Cron表达式-判断时间是否匹配该表达式
1、判断时间是否匹配该表达式 1-1、cronExpression.isSatisfiedBy();2、Demo: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); CronExpression cronExpression = new CronExpression("* 5 16,6 8 10 ? 2015-2016"); boolean resCron = cronExpression.isSatisfiedBy(simpleDateFormat.parse("2015-10-08 16:05:59")); System.out.println(resCron);
1.2、验证一个cron表达式-是否合法-方式
1、验证一个cron表达式-是否合法-方式:有很多种方式,列举常见的两种: 1-1、正则表达式方法 String regEx = "(((^([0-9]|[0-5][0-9])(\\,|\\-|\\/){1}([0-9]|[0-5][0-9]))|^([0-9]|[0-5][0-9])|^(\\* ))((([0-9]|[0-5][0-9])(\\,|\\-|\\/){1}([0-9]|[0-5][0-9]) )|([0-9]|[0-5][0-9]) |(\\* ))((([0-9]|[01][0-9]|2[0-3])(\\,|\\-|\\/){1}([0-9]|[01][0-9]|2[0-3]) )|([0-9]|[01][0-9]|2[0-3]) |(\\* ))((([0-9]|[0-2][0-9]|3[01])(\\,|\\-|\\/){1}([0-9]|[0-2][0-9]|3[01]) )|(([0-9]|[0-2][0-9]|3[01]) )|(\\? )|(\\* )|(([1-9]|[0-2][0-9]|3[01])L )|([1-7]W )|(LW )|([1-7]\\#[1-4] ))((([1-9]|0[1-9]|1[0-2])(\\,|\\-|\\/){1}([1-9]|0[1-9]|1[0-2]) )|([1-9]|0[1-9]|1[0-2]) |(\\* ))(([1-7](\\,|\\-|\\/){1}[1-7])|([1-7])|(\\?)|(\\*)|(([1-7]L)|([1-7]\\#[1-4]))))|(((^([0-9]|[0-5][0-9])(\\,|\\-|\\/){1}([0-9]|[0-5][0-9]) )|^([0-9]|[0-5][0-9]) |^(\\* ))((([0-9]|[0-5][0-9])(\\,|\\-|\\/){1}([0-9]|[0-5][0-9]) )|([0-9]|[0-5][0-9]) |(\\* ))((([0-9]|[01][0-9]|2[0-3])(\\,|\\-|\\/){1}([0-9]|[01][0-9]|2[0-3]) )|([0-9]|[01][0-9]|2[0-3]) |(\\* ))((([0-9]|[0-2][0-9]|3[01])(\\,|\\-|\\/){1}([0-9]|[0-2][0-9]|3[01]) )|(([0-9]|[0-2][0-9]|3[01]) )|(\\? )|(\\* )|(([1-9]|[0-2][0-9]|3[01])L )|([1-7]W )|(LW )|([1-7]\\#[1-4] ))((([1-9]|0[1-9]|1[0-2])(\\,|\\-|\\/){1}([1-9]|0[1-9]|1[0-2]) )|([1-9]|0[1-9]|1[0-2]) |(\\* ))(([1-7](\\,|\\-|\\/){1}[1-7] )|([1-7] )|(\\? )|(\\* )|(([1-7]L )|([1-7]\\#[1-4]) ))((19[789][0-9]|20[0-9][0-9])\\-(19[789][0-9]|20[0-9][0-9])))"; String tests = "0 0 0 L * ?"; System.out.println(tests.matches(regEx)); 1-2、CronExpression验证 1-2-1、这个方法需要引入quartz的jar包: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> 1-2-2、示例代码: boolean validExpression = CronExpression.isValidExpression(crontab);
2、Cron表达式解析-详细解析
https://www.cnblogs.com/javahr/p/8318728.html
3、CronExpression类-源码
https://www.jianshu.com/p/fb92bdf7a093