前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cron-utils获取下几次执行时间

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

作者头像
阿超
发布2024-01-05 09:28:48
1890
发布2024-01-05 09:28:48
举报
文章被收录于专栏:快乐阿超快乐阿超

忍耐与温柔是最大的力量。——哈特

首先引入依赖:

代码语言:javascript
复制
<dependency>
    <groupId>com.cronutils</groupId>
    <artifactId>cron-utils</artifactId>
    <version>9.2.0</version>
</dependency>

然后是代码:

代码语言:javascript
复制
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;
    }
}

使用:

代码语言:javascript
复制
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);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档