提交修改

This commit is contained in:
quyixiao 2025-10-19 12:13:32 +08:00
parent 59a6a9354f
commit 838612adf3

View File

@ -0,0 +1,90 @@
package com.heyu.api.schedule;
import com.heyu.api.data.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.quartz.TriggerUtils;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.scheduling.support.CronSequenceGenerator;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
public class CronTriggerUtils {
/**
* @param cronExpression cron表达式
* @param numTimes 下一()次运行的时间
* @return
*/
public static Date getNextExecTime(String cronExpression) {
CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
try {
cronTriggerImpl.setCronExpression(cronExpression);
} catch (ParseException e) {
e.printStackTrace();
}
// 这个是重点一行代码搞定
List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 1);
for (Date date : dates) {
return date;
}
return null;
}
/**
* @param cronExpression cron表达式
* @param numTimes 下一()次运行的时间
* @return
*/
public static Date getCurrentExecTime(String cronExpression) {
CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cronExpression);
Date lastMinute= DateUtils.getBeforeMinute(new Date(),1);
Date nextTriggerTime = cronSequenceGenerator.next(lastMinute);//lastMinute 我这里是上一分钟的date类型对象
return nextTriggerTime;
}
/**
* @param cronExpression cron表达式
* @param numTimes 下一()次运行的时间
* @return
*/
public static List<String> getNextsExecTime(String cronExpression, Integer numTimes) {
List<String> list = new ArrayList<>();
CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
try {
cronTriggerImpl.setCronExpression(cronExpression);
} catch (ParseException e) {
e.printStackTrace();
}
// 这个是重点一行代码搞定
List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (Date date : dates) {
list.add(dateFormat.format(date));
}
return list;
}
public static void main(String[] args) throws Exception {
String cronExpression = "0 * * * * ?";
Date nextTunTime = CronTriggerUtils.getCurrentExecTime(cronExpression);
System.out.println(nextTunTime);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cronExpression);
for (int i = 0; i < 10; i++){
log.info("执行时间:" + df.format(nextTunTime));
Date nextTriggerTime = cronSequenceGenerator.next(nextTunTime);//lastMinute 我这里是上一分钟的date类型对象
nextTunTime = nextTriggerTime;
}
}
}