cron-utils获取下几次执行时间

简介: cron-utils获取下几次执行时间

首先引入依赖:

<dependency>
    <groupId>com.cronutils</groupId>
    <artifactId>cron-utils</artifactId>
    <version>9.2.0</version>
</dependency>

然后是代码:

import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;

import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;

public class CronUtils {

    public static LocalDateTime getNextExecutions(String cronExpression) {
        return getNextExecutions(cronExpression, 1).stream().findFirst().orElse(null);
    }

    public static List<LocalDateTime> getNextExecutions(String cronExpression, int count) {
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
        Cron quartzCron = parser.parse(cronExpression);
        ExecutionTime executionTime = ExecutionTime.forCron(quartzCron);

        List<LocalDateTime> nextExecutions = new ArrayList<>();
        ZonedDateTime nextExecution = ZonedDateTime.now();

        for (int i = 0; i < count; i++) {
            nextExecution = executionTime.nextExecution(nextExecution).orElse(null);
            if (nextExecution != null) {
                nextExecutions.add(nextExecution.toLocalDateTime());
            } else {
                break;
            }
        }

        return nextExecutions;
    }
}

使用:

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;

/**
 * CronUtilsTest
 *
 * @author VampireAchao<achao @ hutool.cn>
 */
class CronUtilsTest {

    @Test
    void getNextExecutionTest() {
        String cronExpression = "0 0 6 * * ?";
        LocalDateTime localDateTime = CronUtils.getNextExecutions(cronExpression);
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime nextSixAM = now.truncatedTo(ChronoUnit.DAYS).withHour(6);
        if (now.isAfter(nextSixAM)) {
            nextSixAM = nextSixAM.plusDays(1);
        }
        Assertions.assertEquals(nextSixAM, localDateTime);
    }

    @Test
    void getNextExecutionsTest() {
        String cronExpression = "0 0 6 * * ?";
        List<LocalDateTime> nextExecutions = CronUtils.getNextExecutions(cronExpression, 10);
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime nextSixAM = now.truncatedTo(ChronoUnit.DAYS).withHour(6);
        if (now.isAfter(nextSixAM)) {
            nextSixAM = nextSixAM.plusDays(1);
        }
        Assertions.assertEquals(List.of(
                nextSixAM,
                nextSixAM.plusDays(1),
                nextSixAM.plusDays(2),
                nextSixAM.plusDays(3),
                nextSixAM.plusDays(4),
                nextSixAM.plusDays(5),
                nextSixAM.plusDays(6),
                nextSixAM.plusDays(7),
                nextSixAM.plusDays(8),
                nextSixAM.plusDays(9)
        ), nextExecutions);
    }
}
相关文章
|
4月前
|
存储 Linux Shell
Linux中的计划任务—Crontab调度一次性执行的任务at/batch
Linux中的计划任务—Crontab调度一次性执行的任务at/batch
126 0
Cron表达式范例:每隔5秒执行一次:*/5 * * * * ?
Cron表达式范例: 每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? ...
4979 0
|
11月前
|
Java Linux
如何编写一个自动关闭某个进程的脚本,并使用cron定时执行?
如何编写一个自动关闭某个进程的脚本,并使用cron定时执行?
210 0
|
12月前
|
Java 调度
Quartz-Cron表达式统计最近几次的执行时间
Quartz-Cron表达式统计最近几次的执行时间
204 0
Golang:robfig/cron执行定时任务
Golang:robfig/cron执行定时任务
441 0
crontab设置定时任务脚本文件每秒运行一次,每个月最后一天的21点到22点 每20分钟(1200秒)执行一次
crontab设置定时任务脚本文件每秒运行一次,每个月最后一天的21点到22点 每20分钟(1200秒)执行一次
1090 0
|
Linux PHP
Linux crontab 每分钟、每小时、每天、每周、每月、每年定时执行
Linux crontab 每分钟、每小时、每天、每周、每月、每年定时执行
crontab安装以及定时任务的执行
crontab安装以及定时任务的执行
108 0
|
Python
[oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True
[oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True
76 0
[oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True
|
SQL Shell Linux
如何用crontab每隔1分钟执行一个命令行脚本,shell设定时任务
如何用crontab每隔1分钟执行一个命令行脚本,shell设定时任务
752 0
如何用crontab每隔1分钟执行一个命令行脚本,shell设定时任务