piapia123
zh

Cron 表达式解析与执行时间预测

转换计算

所有处理都在浏览器本地完成,数据不上传服务器

输入
输出

把「*/15 9-17 * * 1-5」这样的表达式翻译成人话:先逐字段说明每一位写了什么,再给出一句话总结,最后列出接下来几次会在什么时候执行。执行时间按「跳到下一个可能匹配的时刻」计算,而不是逐分钟去试,所以即使指定的是 2 月 29 日也能立刻出结果。写了一个永远不会触发的表达式(比如 2 月 31 日),工具会直接说明原因,而不是让页面一直转。

功能

  • 五种写法全都支持:星号、单值、区间 a-b、列表 a,b,c、步长(星号或区间后接 /n)
  • 月份与星期可以直接写 JAN-DEC、SUN-SAT 名字
  • 逐字段说明 + 一句话总结(如「每周一至周五 9 点到 17 点 的 每 15 分钟」)
  • 列出接下来 1-50 次执行时间,并标出星期
  • 正确处理「日」与「星期」都限定时的「或」关系(Vixie cron 语义)
  • 支持 @daily、@hourly、@weekly、@monthly、@yearly 等宏
  • 永远不会触发的表达式当场判死,并指明是哪个字段的组合不可能
  • 执行时间可按本地时区或 UTC 显示(服务器上的 cron 多数按 UTC 跑)

使用方法

  1. 把 5 字段 cron 表达式粘进输入框
  2. 选择说明语言、列出几次、按哪个时区显示
  3. 点「运行」(或按 Ctrl/⌘ + Enter)
  4. 复制结果,或按说明修正表达式

常见问题

为什么我的 6 字段表达式被拒绝了?
前面多一个「秒」字段是 Quartz、Spring 的写法,经典 cron 只有 5 个字段。如果按 5 字段去读 6 字段的表达式,每一个字段都会错位,算出来的执行时间和你想的完全不是一回事 —— 所以这里选择直接拒绝并提示删掉秒那一栏,而不是硬着头皮解析。
「日」和「星期」同时写了会怎样?
经典 cron(Vixie)的规则是「或」:「0 0 1 * 1」表示每月 1 号或每周一都执行。只有当其中一个写了星号时,才退化成「与」。这条规则很多实现会做错,本工具按 Vixie 的语义处理:两个字段都受限时取或。
执行时间按哪个时区算?
可以切换,默认本地时区。容器与服务器上的 cron 通常按 UTC 运行,本地调试时按本地时区看更直观,所以两个都给。切换时区后列出的时刻会整体平移,星期也会跟着变。
为什么提示表达式永远不会触发?
比如「0 0 31 2 *」:2 月没有 31 号,任何年份都不会执行。工具会检查「日」与「月」的组合是否在任何年份都不存在。此外还设有 4 年的搜索上限(闰年的最长间隔可达 8 年),超出上限就如实报告找不到,绝不会为了找而一直算下去。

相关工具