计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。

在开发中,需要检验cron表达式的合法性以及获取执行时间。在CronUtil中实现了这些功能。

二、引入maven依赖

<dependency>
            <groupId>com.cronutils</groupId>
            <artifactId>cron-utils</artifactId>
            <version>9.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>
package com.asyf.demo.other_api.cron.cronutils;
import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.model.Cron;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;
import org.quartz.TriggerUtils;
import org.quartz.impl.triggers.CronTriggerImpl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import static com.cronutils.model.CronType.QUARTZ;
public class CronUtil {
    public static void main(String[] args) throws ParseException {
        String expressiion = "0 0 0 ? 5 2#1";
        //expressiion = "0 0 0 0 5 2#1";
        //格式校验
        boolean b = checkValid(expressiion);
        System.out.println(b);
        if (b) {
            //解释cron表达式
            String s = describeCron(expressiion);
            System.out.println(s);
            //获取下次运行时间
            List<Date> nextExecTime = getNextExecTime(expressiion, 5);
            nextExecTime.stream().forEach(d -> {
                System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d));
     * 解释cron表达式
    public static String describeCron(String expressiion) {
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
        CronParser parser = new CronParser(cronDefinition);
        Cron cron = parser.parse(expressiion);
        //设置语言
        CronDescriptor descriptor = CronDescriptor.instance(Locale.CHINESE);
        return descriptor.describe(cron);
     * 检查cron表达式的合法性
     * @param cron cron exp
     * @return true if valid
    public static boolean checkValid(String cron) {
        try {
            CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
            CronParser parser = new CronParser(cronDefinition);
            parser.parse(cron);
        } catch (IllegalArgumentException e) {
            System.out.println(String.format("cron=%s not valid", cron));
            return false;
        return true;
     * @param cronExpression cron表达式
     * @param numTimes       下一(几)次运行的时间
     * @return
    public static List<Date> getNextExecTime(String cronExpression, Integer numTimes) throws ParseException {
        List<String> list = new ArrayList<>();
        CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
        cronTriggerImpl.setCronExpression(cronExpression);
        // 这个是重点,一行代码搞定
        return TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
在 00:00 在 五月 月 星期一 1 每个月
2021-05-03 00:00:00
2022-05-02 00:00:00
2023-05-01 00:00:00
2024-05-06 00:00:00
2025-05-05 00:00:00
目录一、前言二、引入maven依赖三、源码四、测试一、前言计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。在开发中,需要检验cron表达式的合法性以及获取执行时间。在CronUtil中实现了这些功能。二、引入maven依赖&lt;dependency&gt; &lt;groupId&gt;com.cronuti 该gem的目标是 解析 cron tab时序规范,并确定何时应运行该作业。 它不是调度程序,它不运行作业。 API示例 cron _parser = Cron Parser.new('30 * * * *') # Next occurrence next_time = cron _parser.next(Time.now) # Last occurrence most_recent_time = cron _parser.last(Time.now)
Cron 表达式 详解和 表达式 的验证 本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接。 本文 cron 表达式 详解的大部分内容参考了[ cron 表达式 详解]和 Quartz 使用总结、 Cron 表达式 这两篇文章。 cron 校验 的内容参考了 判断 cron 表达式 输入是否有效的正则 表达式 和Verifying a cron expression is valid in Java 这两篇文章。 一、 表达式 组成 Cron 表达式 是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义, Cron
Cron ExpressionValidator.validate Cron Expression = function(value) { var results = true; if (value == null || value.length == 0) { return false; String job Cron Express = "xxxxxxxxxx";//此处为 cron 表达式 Cron Expression cron Expression =new Cron Expression(job Cron Express);//导包import org. quartz . Cron Expression;
org.springframework.scheduling. quartz . Cron TriggerBean允许你更精确地控制任务的运行 时间 ,只需要设置其 cron Expression属性。 一个 cron Expression 表达式 有至少6个(也可能是7个)由空格分隔的 时间 元素。从左至右,这些元素的定义如下: 1.秒(0–59) 2.分钟(0–59) 3.小时(0–23) 4.月份中的日期(1
import java .text.ParseException; import java .text.SimpleDateFormat; import java .util.ArrayList; import java .util.Date; import java .util.List; import org. quartz . Cron Expression; import org. quartz . Cron ScheduleBuilder; import org. quartz .Cr. public static Cron Trigger get Cron Trigger(String cron ) { if (! Cron Expression.isValidExpression( cron )) { throw new... import java .text.ParseException; import java .util.Date; import org. quartz . Cron Expression; public class Cron Parser { public static void main(String[] args) { String cron Expression = " /5 * * * ?"; try { Cron Expression cron = new Cron Expression( cron Expression); Date nextValidTime = cron .getNextValidTimeAfter(new Date()); System.out.println(nextValidTime); } catch (ParseException e) { e.printStackTrace(); 这个示例代码可以 解析 cron 表达式 ,并输出下一次 执行 时间