@Slf4j
public class CronUtil {
private CronUtil() {
}
public static CronTrigger getCronTrigger(String cron) {
if (!CronExpression.isValidExpression(cron)) {
throw new RuntimeException("cron :" + cron + "表达式解析错误");
}
return TriggerBuilder.newTrigger().withIdentity("Caclulate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
}
public static Date getNextTriggerTime(String cron, Date start) {
CronTrigger trigger = getCronTrigger(cron);
if (start == null) {
start = trigger.getStartTime();
}
return trigger.getFireTimeAfter(start);
}
public static Date getNextTriggerTime(String cron) {
CronTrigger trigger = getCronTrigger(cron);
return getNextTriggerTime(cron, null);
}
/**
* 解析指定表达式获取时分秒区间
*
* @param cron
* @return
*/
public static TreeMap<String, String> getCronExecutionHHmmssTime(String cron) {
CronTrigger trigger = getCronTrigger(cron);
TreeMap<String, String> timeMap = new TreeMap<>(Comparator.comparingInt(Integer::valueOf));
Date startTime = trigger.getStartTime();
String key;
while (true) {
startTime = trigger.getFireTimeAfter(startTime);
key = DateUtils.parseDate(startTime, "HHmmss");
if (timeMap.containsKey(key)) {
break;
}
timeMap.put(key, key);
}
return timeMap;
}