注意:xxljob的cron大部分和SpringBoot的是一样的,但是在周的处理上有点不同
xxljob:【1,7】代表【周日,周六】
SpringBoot:【1,7】代表【周一,周日】
所以xxljob的执行时间和不能直接用SpringBoot的工具类处理(目前发现只有周会这样,不是按周处理的话不要紧)

quartz

<!-- 依赖quartz -->
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.2.1</version>
  <exclusions>
    <exclusion>
      <artifactId>slf4j-api</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

cron是否正确校验

CronExpression.isValidExpression(cron)
返回Boolean格式

xxljob工具类

cron是否正确校验

CronExpression.isValidExpression(cron)

下次执行时间

CronExpression expression = new CronExpression(cron);
Date nextTime = expression.getNextInvalidTimeAfter(new Date()); //这个时间之后的第一次执行时间

SpringBoot工具类

CronSequenceGenerator

cron是否正确校验

CronSequenceGenerator.isValidExpression(cron)

下次执行时间

CronSequenceGenerator expression = new CronSequenceGenerator(cron);
Date nextTime = expression.next(new Date()); //这个时间之后的第一次执行时间

cron-utils

可以处理spring和quartz

        <dependency>
            <groupId>com.cronutils</groupId>
            <artifactId>cron-utils</artifactId>
            <version>9.1.6</version>
        </dependency>

自定义工具类

* cron的表达式 秒 分 时 日 月 周 public static String cronModel = "%s %s %s %s %s %s"; public static ExecutionTime getExecutionTime(String cron) { CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ); CronParser parser = new CronParser(cronDefinition); return ExecutionTime.forCron(parser.parse(cron)); * 给定的时间是否在cron表达式之中 public static boolean isRunDate(ExecutionTime executionTime, Date date) { return executionTime.isMatch(dateToZonedDateTime(date)); * 获取下次执行时间,若是当前时间合适,返回这个时间 * @param cron * @param date * @return public static Date getNowOrNextDate(ExecutionTime executionTime, Date date) { if (isRunDate(executionTime, date)) { return date; } else { return getNextDate(executionTime, date); * 获取这个时间之后的下次执行时间 * @param cron * @param date * @return public static Date getNextDate(ExecutionTime executionTime, Date date) { ZonedDateTime time = executionTime.nextExecution(dateToZonedDateTime(date)).orElse(null); return zonedDateTimeToDate(time); * 或者这个时间之前的上次执行时间 * @param cron * @param date * @return public static Date getLastRunDate(ExecutionTime executionTime, Date date) { ZonedDateTime time = executionTime.lastExecution(dateToZonedDateTime(date)).orElse(null); return zonedDateTimeToDate(time); * 将ZonedDateTime转date * @param date * @return public static Date zonedDateTimeToDate(ZonedDateTime time) { if (time == null) { return null; } else { return Date.from(time.toInstant());