北京时间 · 免费在线时间工具大全当前北京时间 --:--:--
首页/Cron表达式解析

Cron表达式解析

五段表达式校验 · 未来 5 次执行时间 · 支持本地与北京时间

输入 Cron 表达式

五段顺序:分 时 日 月 周。支持 * 、数字、a-b、a,b、*/n 写法,星期 0 和 7 都表示周日。

五段结构各自的取值范围

Cron 表达式由空格分成五段,顺序固定为分、时、日、月、周,不能颠倒。第一段分钟取 0 到 59,第二段小时取 0 到 23,第三段日期取 1 到 31,第四段月份取 1 到 12,第五段星期取 0 到 7,其中 0 和 7 都代表周日。段内可以用星号表示全部,用逗号列多个值,用连字符表示区间,用斜杠表示步长,例如 0,15,30,45、9-18、星号斜杠 15 都是常见写法。

解析器会逐段检查:数字是否越界、区间起点是否大于终点、逗号之间是否出现空值、步长是否为零。任何一段有问题都会明确指出是哪个字段、错在哪里,而不是笼统地说表达式无效。合法表达式会同时给出每一段的展开结果和值的个数,方便核对 星号斜杠 15 到底展开了哪几个分钟,也能看出区间端点是否写反。

日与周的「或」关系和时区影响

最容易踩坑的是第三段和第五段的关系。很多人以为日期写 1 号、星期写周一代表「1 号且是周一」,实际标准 Cron 采用或:两个字段都写了具体值时,满足其中一个就执行;只要其中一个是星号,就完全以另一个为准。所以在日期段写 31、星期段写周一,结果是每月 31 号和每个周一都触发。排定时任务时如果只想「每月最后一个工作日」这类逻辑,Cron 本身表达不了,需要把判断写进脚本。

第二个影响是时区。Cron 守护进程按服务器时区解释表达式,容器里常见的镜像是 UTC,而你在国内看到的北京时间比 UTC 快 8 小时。同一个「0 9 星号 星号 星号」,在 UTC 服务器上实际是北京时间 17:00 执行。页面提供本地时区与北京时间两种口径,算出未来五次触发时刻后逐条对照,能很快发现时区错位。夏令时切换当天某次任务可能被跳过或重复,这是时区数据本身的行为,不是解析错误。

常见问题

星号加斜杠的写法是什么意思?

星号加斜杠表示从最小值开始按固定步长取值。分钟字段写星号斜杠 15,等价于 0,15,30,45,即每 15 分钟执行一次;小时字段写星号斜杠 2,等价于 0,2,4,6 一直到 22,即每两小时执行一次。斜杠后面的数字必须大于 0,写 0 会被判为非法表达式。

日期和星期同时写了,任务哪天执行?

标准 Cron 的规则是:日期和星期两个字段中只要有一个是星号,就以另一个为准;如果两个都写了具体值,则满足任意一个就执行,是「或」的关系,而不是「且」。例如日期写 1 号、星期写周一,那么每月 1 号和每个周一都会执行。两个字段都写星号则每天都执行。

为什么星期字段的 0 和 7 都表示周日?

传统 Cron 用 0 表示周日,但部分系统和文档沿用 1 到 7 的编号,其中 7 也表示周日,于是 0 和 7 成了同一天的两种写法。本工具两者都接受,内部统一按 0 处理。星期字段的 1 到 6 依次是周一到周六,不要和日期字段的 1 到 31 混淆。

为什么算出的执行时间和服务器上不一致?

Cron 按服务器所在时区解释时间,而本工具默认按你浏览器的本地时区显示。若服务器使用 UTC 或其他时区,同一个表达式触发的北京时间就会不同。可以切换到北京时间对照,或把服务器时区换算后再核对;另外夏令时切换当天可能出现某次任务跳过或重复,这也属于正常现象。