java对cron计算处理
注意: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());
        }
    }

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号