浏览代码

代码修改

LAPTOP-KB9HII50\70708 1 年之前
父节点
当前提交
da4817dec2
共有 2 个文件被更改,包括 63 次插入0 次删除
  1. 6 0
      common/common-util/pom.xml
  2. 57 0
      common/common-util/src/main/java/com/yihu/jw/cron/CronUtils.java

+ 6 - 0
common/common-util/pom.xml

@ -138,5 +138,11 @@
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </dependency>
        <!-- cron解析 依赖这个包 -->
        <dependency>
            <groupId>com.cronutils</groupId>
            <artifactId>cron-utils</artifactId>
            <version>9.1.6</version>
        </dependency>
    </dependencies>
</project>

+ 57 - 0
common/common-util/src/main/java/com/yihu/jw/cron/CronUtils.java

@ -0,0 +1,57 @@
package com.yihu.jw.cron;
import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
 * cron表达式工具类
 * Created by yeshijie on 2023/10/28.
 */
public class CronUtils {
    /**
     * 根据cron表达式解析最近几次的执行时间
     * @param cronStr
     * @param num
     * @return
     */
    public static List<String> getExecutionTimeByNum(String cronStr, Integer num, LocalDateTime localDateTime) {
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.SPRING));
        Cron cron = parser.parse(cronStr);
        ExecutionTime time = ExecutionTime.forCron(cron);
        ZonedDateTime now;
        if(localDateTime == null){
            now = ZonedDateTime.now();
        }else {
            now = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
        }
        ZonedDateTime next = getNext(time, now);
        List<ZonedDateTime> timeList = new ArrayList<>(num);
        timeList.add(next);
        for (int i = 1; i < num; i++) {
            next = getNext(time, next);
            timeList.add(next);
        }
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        List<String> resultList = new ArrayList<>(num);
        for (ZonedDateTime item : timeList) {
            String result = item.format(format);
            resultList.add(result);
        }
        return resultList;
    }
    private static ZonedDateTime getNext(ExecutionTime time, ZonedDateTime current) {
        return time.nextExecution(current).get();
    }
}