From 838612adf34609b7aa3e757f891651f6bb6b0055 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Sun, 19 Oct 2025 12:13:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../heyu/api/schedule/CronTriggerUtils.java | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/schedule/CronTriggerUtils.java diff --git a/api-web/api-interface/src/main/java/com/heyu/api/schedule/CronTriggerUtils.java b/api-web/api-interface/src/main/java/com/heyu/api/schedule/CronTriggerUtils.java new file mode 100644 index 0000000..50e09c6 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/schedule/CronTriggerUtils.java @@ -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 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 getNextsExecTime(String cronExpression, Integer numTimes) { + List list = new ArrayList<>(); + CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); + try { + cronTriggerImpl.setCronExpression(cronExpression); + } catch (ParseException e) { + e.printStackTrace(); + } + // 这个是重点,一行代码搞定 + List 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; + } + + } + +}