Cron 表达式解析器

概述

Cron 表达式解析器接受一条 cron 表达式,输出人类可读的中文描述、ASCII 字段图、最近 5 次执行时间和上 5 次执行时间。它适合在编写定时任务前验证表达式逻辑,以及排查调度行为与预期不符的问题。

Cron 表达式语法与字段说明

工具支持 5 字段(Linux 标准)和 6 字段(含秒)两种格式:

  • 5 字段分钟 小时 日 月 周,适合大多数 Linux crontab 场景
  • 6 字段及以上秒 分钟 小时 日 月 周,适合 Spring、Quartz 等需要秒粒度的框架

每个字段支持 *(任意)、,(列举)、-(范围)、/(步进)四种基本操作符,以及 L#WH? 五种特殊字符。

特殊字符 L、# 和 W 的用法

L(Last) 在日字段中表示当月最后一天,在周字段中表示该月最后一个指定星期几:

0 18 L * *       # 每月最后一天 18:00
30 10 * * 5L     # 每月最后一个周五 10:30

#(第 N 个) 仅用于周字段,格式 星期#第几个,值从 1(周日)到 7(周六):

0 10 ? * 2#3     # 每月第三个周二 10:00
0 9  ? * 1#1     # 每月第一个周日 09:00

? 用于日或周字段表示"不指定",避免日和周同时设置产生歧义:

30 9 ? * MON-FRI   # 周一至周五 09:30,日字段不限
0 12 15 * ?        # 每月 15 日 12:00,周字段不限

实用表达式示例

*/5 * * * *        # 每 5 分钟执行一次
0 9 * * 1          # 每周一 09:00
0 0 1 * *          # 每月 1 日零点
0/15 0 * * ?       # 从 0 分开始每 15 分钟
15,45 13 ? 6 Tue   # 6 月每个周二 13:15 和 13:45
0-5 13 * * ?       # 每天 13:00 至 13:05 每分钟
0 18 L * ?         # 每月最后一天 18:00
0 10 ? * 2#3       # 每月第三个周二 10:00

执行时间列表的上限

occurrences 参数控制显示的执行次数,最小 1,最大 50,工具默认显示 5 次。在极端规则(如仅每年执行 1 次的表达式)下,迭代器达到边界时会提前终止,列表中显示的条目可能少于设定次数,属于正常行为。

时区与 H 占位符

tz 参数接受 IANA 时区名(如 Asia/Shanghai),由底层库处理夏令时边界,结果时间会按所选时区展示。H 是稳定抖动占位符,未指定 hashSeed 时会随环境波动,不适合在不同机器上期望相同触发时间的场景。