1、Cron表达式解析-工具类

  1. 1、需引入依赖
  2. <dependency>
  3. <groupId>org.quartz-scheduler</groupId>
  4. <artifactId>quartz</artifactId>
  5. <version>2.2.1</version>
  6. </dependency>
  7. 2Demo
  8. public class CronAnalyzeUtil {
  9. /**
  10. * 调度表达式解析
  11. * @param expression 调度cron表达式
  12. * @return
  13. */
  14. public static String cronAnalyze(String expression){
  15. CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(expression);
  16. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  17. Date date = null;
  18. try {
  19. date = cronSequenceGenerator.next(new Date());
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. String str = null;
  24. if (date != null) {
  25. str = sdf.format(date);
  26. }
  27. return str;
  28. }
  29. /**
  30. * 通过cron获取时间
  31. * @param cronExpression cron表达式
  32. * @param numTimes 下一(几)次运行的时间
  33. * @param format 时间格式
  34. * @return
  35. */
  36. public static List<String> getNextExecTime(String cronExpression,Integer numTimes,String format) {
  37. List<String> list = new ArrayList<>();
  38. CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
  39. try {
  40. cronTriggerImpl.setCronExpression(cronExpression);
  41. } catch(ParseException e) {
  42. e.printStackTrace();
  43. }
  44. List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
  45. SimpleDateFormat dateFormat = new SimpleDateFormat(format);
  46. for (Date date : dates) {
  47. list.add(dateFormat.format(date));
  48. }
  49. return list;
  50. }
  51. /**
  52. * 获取调度时间频率
  53. * @param cronExpression
  54. * @param format
  55. * @return
  56. */
  57. public static int scheduleTimeRate(String cronExpression,String format){
  58. List<String> nextExecTime = CronAnalyzeUtil.getNextExecTime(cronExpression, 2, format);
  59. Integer value0 = Integer.valueOf(nextExecTime.get(0));
  60. Integer value1 = Integer.valueOf(nextExecTime.get(1));
  61. return value1-value0;
  62. }
  63. }

1.1、Cron表达式-判断时间是否匹配该表达式

  1. 1、判断时间是否匹配该表达式
  2. 1-1cronExpression.isSatisfiedBy();
  3. 2Demo
  4. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  5. CronExpression cronExpression = new CronExpression("* 5 16,6 8 10 ? 2015-2016");
  6. boolean resCron = cronExpression.isSatisfiedBy(simpleDateFormat.parse("2015-10-08 16:05:59"));
  7. System.out.println(resCron);

1.2、验证一个cron表达式-是否合法-方式

  1. 1、验证一个cron表达式-是否合法-方式:有很多种方式,列举常见的两种:
  2. 1-1、正则表达式方法
  3. 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])))";
  4. String tests = "0 0 0 L * ?";
  5. System.out.println(tests.matches(regEx));
  6. 1-2CronExpression验证
  7. 1-2-1、这个方法需要引入quartzjar包:
  8. <dependency>
  9. <groupId>org.quartz-scheduler</groupId>
  10. <artifactId>quartz</artifactId>
  11. <version>2.2.1</version>
  12. </dependency>
  13. 1-2-2、示例代码:
  14. boolean validExpression = CronExpression.isValidExpression(crontab);

2、Cron表达式解析-详细解析

  1. https://www.cnblogs.com/javahr/p/8318728.html

3、CronExpression类-源码

  1. https://www.jianshu.com/p/fb92bdf7a093