Cron 表达式解释器

粘贴任意 cron 表达式,用大白话看懂它的意思,并算出接下来几次到底什么时候跑 —— 按你所在时区,含夏令时。

同时提供 Windows 桌面版。

关于这个工具

cron 表达式是用五个字段写成的紧凑日程表 —— 分、时、月内日期、月份、星期。读懂它通常很容易,直到不那么容易为止:0 0 1 * 0 到底是每月 1 号、每周日,还是两者都算?这个工具回答这个问题,然后告诉你任务接下来真的会在哪几个时刻触发。

大多数 cron 工具只做到「把表达式翻译成一句话」。真正导致线上事故的是「下次到底什么时候跑」—— 尤其是在夏令时切换前后:同一条表达式在一年里有两个时刻会对应到不同的壁钟小时;或者你要的那个时间在那一天压根不存在。

所有计算都在你的浏览器里完成。你输入的表达式不会被发送到任何地方,也不需要注册。

常见问题

它考虑时区和夏令时吗?
会。选一个时区,下次运行时间就按该时区解析,包含历史与未来的夏令时切换。春季跳变造成的缺口会被跳过并明确告知;在某一天不存在的壁钟时间,绝不会被当作运行时间返回给你。
0 0 1 * 0 是什么意思?
既是每月 1 号零点,也是每周日零点。当「月内日期」和「星期」两个字段都被限定时,cron 把二者当作「或」而不是「且」。这个工具会把这个行为标出来,而不是默默选一边 —— 因为这是最常见的 cron 意外。
可以用 MON、JAN 这类名称吗?
可以。月份和星期字段接受三字母的英文名称,且不区分大小写。
@daily 这类快捷写法支持吗?
支持 @yearly、@annually、@monthly、@weekly、@daily、@midnight、@hourly,并会展开成完整表达式。@reboot 不支持,因为它没有可预测的运行时间 —— 它的含义是「开机时」,那不是日程。
支持带秒的六字段写法吗?
支持。如果给了六个字段,第一个会被当作秒 —— 这是 Quartz 与 systemd timer 的约定。
为什么合法的表达式有时算不出运行时间?
有些表达式永远不可能触发,比如 0 0 31 * * 遇到没有 31 号的月份,或者月内日期与星期永远不可能同时成立。在搜索范围内找不到运行时间时,工具会如实说明,而不是编一个答案给你。

相关工具