反馈

crontab执行时间计算

分 时 日 月 周
Linux:
Quartz / Spring:
输入表达式后显示中文说明
格式:Linux 5 段(分 时 日 月 周),或前置秒共 6 段;Quartz 6 段或 7 段(秒 分 时 日 月 周 [年]);Spring 6 段(秒 分 时 日 月 周)。 支持 * , - /、月份 JAN-DEC、星期 SUN-SAT、?。 Quartz / Spring 额外支持:L(当月最后一天,L-3 倒数第 3 天)、LW(最后一个工作日)、15W(离 15 号最近的工作日)、6L(当月最后一个周五)、6#3(当月第 3 个周五);Quartz 还支持年份段。 注意两处方言差异:① 星期数字——Linux / Spring 中 0 或 7 是周日、1 是周一;Quartz 中 1 是周日、7 是周六(建议直接写 MON-FRI 这样的英文缩写避免混淆)。② 日和周同时限定时——Linux 按"或"匹配,Spring 按"且"匹配,Quartz 要求其中一个写 ?。 自动识别:5 段按 Linux,7 段按 Quartz,6 段按 Spring / 带秒的 Linux(星期 0-7);6 段的 Quartz 表达式请手动选 Quartz。全部本地计算,不上传。

📖 工具说明

1. 这个工具做什么

输入一条 crontab 表达式,得到:

改表达式、起始时间或次数都实时更新。全部在浏览器本地计算,不上传。

2. 支持的语法

方言 段数 字段顺序 星期编号
Linux crontab 5 段(或前置秒的 6 段) [秒] 分 时 日 月 周 0 或 7 = 周日,1 = 周一 … 6 = 周六
Spring 6 段 秒 分 时 日 月 周 同 Linux(0 或 7 = 周日)
Quartz 6 段或 7 段 秒 分 时 日 月 周 [年] 1 = 周日 … 7 = 周六
字段 取值 说明
秒 0–59 6 / 7 段表达式的第 1 段
分 0–59
时 0–23
日 1–31
月 1–12 或 JAN–DEC
周 见上表,或 SUN–SAT
年(仅 Quartz) 1970–2199 第 7 段,可省略

通用特殊字符:*(全部)、,(列表)、-(范围,支持 FRI-MON 跨界)、/(步进,如 */15、0-30/10、5/20)、?(不指定,等同 *)。

Quartz / Spring 额外支持:

写法 位置 含义
L 日 当月最后一天
L-3 日 倒数第 4 天(最后一天往前 3 天)
LW 日 当月最后一个工作日(周一到周五)
15W 日 离 15 号最近的工作日(不会跨月)
6L、FRIL 周 当月最后一个周五(Quartz 下 6 = 周五)
6#3、FRI#3 周 当月第 3 个周五

两处容易踩坑的差异:

  1. 星期数字不同:0 0 10 ? * 6L 在 Quartz 里是"最后一个周五",在 Spring 里 6 是周六,就成了"最后一个周六"。为避免歧义,建议直接写 MON-FRI、FRIL 这样的英文缩写。
  2. 日和周同时限定时:Linux 按"或"匹配——0 0 1 * 1 表示"每月 1 号 或 每周一"(Vixie cron 行为);Spring 按"且"匹配;Quartz 则要求「日」和「周」其中一个必须写 ?,否则报错。

自动识别规则:5 段按 Linux;7 段按 Quartz;6 段按 Spring / 带秒的 Linux(星期 0–7)。6 段的 Quartz 表达式(如 0 0 12 ? * MON-FRI)用了 ? 时两种理解都能解析,但星期数字的含义不同,请手动选「Quartz」。

3. 已知限制

4. 常见问题(FAQ)

Q:显示的时间是哪个时区? A:跟随"起始时间"输入框,也就是你电脑的本地时区。服务器如果用 UTC,请把起始时间按 UTC 填。

Q:*/5 从 0 还是从字段最小值开始? A:从字段允许的最小值开始。分/时是 0,日/月是 1。所以 */2 的日是 1、3、5……不是 2、4、6。

Q:为什么第一条不是我填的起始时刻? A:"未来执行时间"指起始时刻之后的下一次触发,不含起始时刻本身。

Q:0 0 30 2 * 为什么没有结果? A:2 月没有 30 号,这条表达式永不触发,工具会提示("未来 8 年内没有匹配的执行时间")而不是死循环。

Q:表达式会上传吗? A:不会。解析和计算都在你的浏览器里完成。


相关:时间戳转换 · 日期间隔计算 · 正则表达式 · 世界时间转换 · JSON 工具。

📖 了解原理

📖 相关推荐