Skip to content

生成某个时间范围定时执行的Cron表达式

Notifications You must be signed in to change notification settings

QQ502130297/CronUtil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

CronUtil

生成某个时间范围定时执行的Cron表达式集合,任何时间跨度生成的集合最多包含5个cron表达式

应用场景

有一个定时任务需要在 2023年1月20日至2023年7月1日的12:30:58时执行.

传统方式可能需要每天都创建一个定时任务。如果时间跨度很长任务就会特别多。单个cron表达式做不到这一点。
比如 cron:58 30 12 1-20 1-7 ? 2023
表示:在2023年至2023年的1月至7月的1日至20日的每天上午12点30分58秒触发任务。与我们的预期不符

使用示例

public static void main(String[]args){
    List<String> cronList = CronUtil.generateCronExpression("2023-05-14", "2025-08-14", "12:34:27"); 
    // [27 34 12 14-31 5 ? 2023, 27 34 12 * 6-12 ? 2023, 27 34 12 * * ? 2024, 27 34 12 * 1-7 ? 2025, 27 34 12 1-14 8 ? 2025]
    System.out.println(cronList);
}

设计思想

时间范围 "2023-05-14"~"2025-08-14", 具体时间  12:34:27

    |------------------------------------------------------------------------------------------------------------------------------------|
2023-05-14                                                                                                                          2025-08-14
    |---------------|           |---------------|           |---------------|             |---------------|              |---------------|
2023-05-14      2023-05-31  2023-06-01     2023-12-31   2024-01-01     2024-12-31     2025-01-01      2025-07-31     2025-08-01     2025-08-14

        开始时间           结束时间           Cron表达式                      含义
part1:  2023-05-14       2023-05-31        27 34 12 14-31 5 ? 2023        2023-05-14至2023-05-31的12:34:27时执行
part2:  2023-06-01       2023-12-31        27 34 12 * 6-12 ? 2023         2023-06至2023-12每一天的12:34:27时执行
part3:  2024-01-01       2024-12-31        27 34 12 * * ? 2024            2024年的每一天12:34:27时执行
part4:  2025-01-01       2025-07-31        27 34 12 * 1-7 ? 2025          2025-01至2025-07每一天的12:34:27时执行
part5:  2025-08-01       2025-08-14        27 34 12 1-14 8 ? 2025         2025-08-01至2025-08-14的12:34:27时执行

本质就是将上述时间拆分成5个连续的时间段,每一个时间段使用cron进行表示,任何一个时间范围都能拆分成上述5个部分。时间跨度小的情况下拆分的个数小于等于5

cron [27 34 12 14-31 5 ? 2023, 27 34 12 * 6-12 ? 2023, 27 34 12 * * ? 2024, 27 34 12 * 1-7 ? 2025, 27 34 12 1-14 8 ? 2025]

验证

遍历整段时间范围[2023-05-14,2025-08-14]将每一天的执行时间与生成的cron表达式计算出的执行时间对比。
TestCronUtil

About

生成某个时间范围定时执行的Cron表达式

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages