forked from github/dataease
63 lines
1.6 KiB
Java
63 lines
1.6 KiB
Java
package io.dataease.commons.utils;
|
||
|
||
import org.quartz.CronExpression;
|
||
import org.quartz.CronScheduleBuilder;
|
||
import org.quartz.CronTrigger;
|
||
import org.quartz.TriggerBuilder;
|
||
|
||
import java.util.Date;
|
||
|
||
/**
|
||
* @author song.tianyang
|
||
* @Date 2020/12/17 4:06 下午
|
||
* @Description CRON解析类
|
||
*/
|
||
public class CronUtils {
|
||
|
||
/**
|
||
* 解析表达式,获取CronTrigger
|
||
* @param cron
|
||
* @return
|
||
*/
|
||
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();
|
||
}
|
||
|
||
/**
|
||
* 获取以指定时间为开始时间的下一次执行时间
|
||
* @param cron
|
||
* @param start
|
||
* @return
|
||
*/
|
||
public static Date getNextTriggerTime(String cron, Date start) {
|
||
if (start == null) {
|
||
return getNextTriggerTime(cron);
|
||
}else{
|
||
CronTrigger trigger = getCronTrigger(cron);
|
||
return trigger.getFireTimeAfter(start);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取以当前日期为准的下一次执行时间
|
||
* @param cron
|
||
* @return
|
||
*/
|
||
public static Date getNextTriggerTime(String cron) {
|
||
Date date = null;
|
||
try{
|
||
CronTrigger trigger = getCronTrigger(cron);
|
||
Date startDate = trigger.getStartTime();
|
||
date = trigger.getFireTimeAfter(startDate);
|
||
}catch (Exception e){
|
||
|
||
}
|
||
return date;
|
||
}
|
||
|
||
|
||
}
|