CronCheckUtil.java
1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package cn.fw.freya.utils;
import org.springframework.scheduling.support.CronExpression;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author wmy3969
* @version 1.0
* @date 2021/10/05 17:30
* @Description cron表达式执行时间校验工具类
*/
public class CronCheckUtil {
/**
* 根据cron表达式, 获取在某个时间点之后的counter次执行时间列表
*
* @param cronExpression cron表达式
* @param startDate 任务开始的时间
* @param counter 执行次数
* @return
*/
public static List<LocalDateTime> getRuntimeList(String cronExpression, LocalDateTime startDate, int counter) {
final int cnt = Math.max(counter, 1);
ArrayList<LocalDateTime> timeList = new ArrayList<LocalDateTime>(cnt);
CronExpression expression = CronExpression.parse(cronExpression);
LocalDateTime nextTime = Objects.isNull(startDate) ? LocalDateTime.now() : startDate;
for (int i = 0; i < cnt; i++) {
assert nextTime != null;
nextTime = expression.next(nextTime);
timeList.add(nextTime);
}
return timeList;
}
/**
* 测试cron表达式以后的执行时间
*
* @param args
*/
public static void main(String[] args) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
final List<LocalDateTime> runtimeList = CronCheckUtil.getRuntimeList("0 0 * * * ?", LocalDateTime.now(), 100);
runtimeList.forEach(item -> System.out.println(dateTimeFormatter.format(item)));
}
}