祈灵工具箱
登录 / 注册

⏰Cron 表达式解析 - 在线解读与预测下次运行

粘贴一条 Cron 表达式,马上得到三样东西:一句话说明它什么时候运行(比如「每周一至周五,09:00~18:59 之间每 15 分钟」)、每一段被解析出的具体取值、接下来 5 次的实际运行时间。Linux crontab 的 5 段写法、Quartz 和 xxl-job 的 6~7 段写法(第一段是秒,最后可以带年份)、Spring @Scheduled 的 6 段写法都能认,L、W、#、? 这些符号和 MON-FRI、JAN 这类英文缩写、@daily 这类简写都支持;6 段时可以选按 Quartz 还是 Spring 算,因为两者的星期数字含义不同。服务器常用 UTC,可以切换按哪个时区计算,同时显示本机对应的时间,夏令时跳过的时刻会自动略过。全部在浏览器里计算,不上传。

正在加载工具...

如何使用Cron 表达式

  1. 1输入或粘贴 Cron 表达式,也可以点一个常用示例
  2. 2看「含义」一栏的说明,确认和你想要的一致
  3. 36 段写法时选 Quartz 还是 Spring;服务器不在本地时区时,把「按哪个时区计算」改成服务器的时区
  4. 4核对「接下来 5 次运行」,有问题时对照「字段说明」看是哪一段写错了

常见问题

5 段、6 段、7 段有什么区别?
5 段是 Linux crontab 的写法:分 时 日 月 周,最小单位是分钟。6 段在最前面多了「秒」,是 Quartz、xxl-job、Elastic-Job 和 Spring @Scheduled 的写法;7 段在最后再多一个「年」,只有 Quartz 支持。所以同样是每天中午 12 点,crontab 写 0 12 * * *,Quartz 写 0 0 12 * * ?。把 6 段的表达式填进 crontab,或者反过来,都会报错或者跑偏。
星期的数字在各平台一样吗?
不一样,这是最容易出错的地方。crontab:0 和 7 都是周日,1 是周一。Spring @Scheduled:同样 0 和 7 是周日、1 是周一。Quartz 和 xxl-job:1 是周日、2 是周一……7 是周六。所以 0 15 10 ? * 2-6 按 Quartz 是周一到周五,按 Spring 却是周二到周六。写 MON-FRI 这类英文缩写在三者里意思都一样,最不容易出错。
日和星期都写了,是同时满足还是满足其一?
crontab 里两者都有限定(都不以 * 开头)时,满足其一就运行:0 0 1,15 * 5 是「每月 1 号、15 号,再加上每个周五」。Quartz 和 Spring 是两者同时满足:0 0 0 1 * MON 只在「1 号恰好是周一」时运行,从 2026 年 11 月起算,下一次是 2027 年 2 月 1 日。另外 Quartz 要求这两段必须有一个写 ?,否则启动时报错,本工具会提示。
L、W、# 是什么意思?
这是 Quartz 和 Spring 的扩展写法:日写 L 表示每月最后一天,L-2 表示倒数第 3 天,15W 表示离 15 号最近的工作日(15 号是周日就改到 16 号周一),LW 表示每月最后一个工作日;星期写 6L 表示每月最后一个周五(Quartz 里 6 是周五),6#3 表示每月第 3 个周五。实测从 2026 年 11 月起:0 0 10 ? * 6#3 是 11 月 20 日、12 月 18 日、1 月 15 日;0 0 9 15W * ? 因为 11 月 15 日是周日,落在 11 月 16 日。
*/15 和 5/15 有什么区别?
斜杠后面是间隔,前面是起点:*/15 从 0 开始每 15 分钟,即第 0、15、30、45 分;5/15 从 5 开始,即第 5、20、35、50 分;10-30/10 表示第 10、20、30 分。0 */2 * * * 是每 2 小时一次(00:00、02:00……22:00);注意 */7 这种除不尽的间隔每到整点会重新从 0 开始,第 56 分钟之后不会接着隔 7 分钟。
为什么实际运行时间和预测的差了几个小时?
多半是时区不同。cron 按运行它的机器的时钟计时:Linux 服务器看系统时区,云服务器和 Docker 容器常常是 UTC;Spring 和 Quartz 默认用 JVM 的时区,Spring 可以用 @Scheduled(zone = "Asia/Shanghai") 指定;GitHub Actions 的 schedule 一律按 UTC;Kubernetes CronJob 从 1.27 起可以用 spec.timeZone 指定。在本工具里把时区切到服务器的时区,比如 UTC 下的 0 9 * * MON-FRI,会显示为北京时间 17:00。
@daily、@reboot 这类简写是什么?
这是 crontab 支持的简写:@yearly(或 @annually)等于 0 0 1 1 *,@monthly 等于 0 0 1 * *,@weekly 等于 0 0 * * 0,@daily(或 @midnight)等于 0 0 * * *,@hourly 等于 0 * * * *。@reboot 表示系统启动时运行一次,没有固定时间,所以不会预测运行时间。Quartz 和 Spring 不认这些简写(Spring 5.3 起支持 @daily 等,但不支持 @reboot)。
很少触发的表达式能查到吗?
能。本工具最远往后找 8 年,比如 0 0 29 2 *(每年 2 月 29 日)会给出 2028-02-29 和 2032-02-29。夏令时也考虑了:按 America/New_York 计算 30 2 * 3 0(3 月每个周日 2:30)时,2027 年 3 月 14 日这一天的 2:30 因为时钟直接从 2 点跳到 3 点而不存在,会被跳过。
文件会上传服务器吗?
不会。所有处理都在你的浏览器本地完成,没有任何网络上传,关闭页面即清除。
需要注册或付费吗?
不需要。本站完全免费,无需注册登录,没有次数限制。

功能特点

  • 一句话说明含义,中文、英文都有
  • 支持 crontab 5 段、Quartz / xxl-job 6~7 段、Spring @Scheduled 6 段
  • 支持 * , - / ? L W # 以及 MON-FRI、JAN 等缩写和 @daily、@hourly 等简写
  • 预测接下来 5 次运行,最远往后找 8 年(2 月 29 日这类也能找到)
  • 可切换时区,同时显示本机时间,正确处理夏令时
  • 写错时指出是哪一段、哪个值,本地计算不上传