← 返回工具箱

Cron 解析

CRON PARSER · 数据处理

解析 5 / 6 段 Cron 表达式,输出中文可读描述与未来多次执行时间,校验取值范围。

Cron 表达式
方言
常用模板(按当前方言填入)
未来 次执行时间
中文描述
即将执行
三方言语义差异:Quartz 周字段 1=周日(crontab 0/7=周日);Quartz 用 ? 表示「不指定」且日与周互斥,Spring 不支持 ?;L/W/# 为 Quartz 专属(Spring 5.3+ 亦支持 L/W/#),crontab 无 L 语义。切换方言会按新方言重新校验当前表达式。

>_ 使用指南 · GUIDE

粘贴 Cron 表达式(支持 5 段与 6 段格式),立即得到两样东西:中文可读描述(「每天 08:00 执行」)和未来若干次实际执行时间。写表达式的思路是反的——先看翻译对不对,再看执行时间列表是否符合预期,双保险防写错。

校验各字段取值范围(分钟 0–59、月份 1–12 等),写错的字段当场指出。配置定时任务、排查「任务为什么在奇怪的时间跑」时,先来这里翻译一遍。本地解析,零网络请求。

>_ 常见问题 · FAQ

Q1 · 0 0 * * * 是什么意思?

五个字段依次是「分 时 日 月 周」:分钟 0、小时 0、其余任意 → 每天 00:00 执行。类似的常用表达式:*/5 * * * * 每 5 分钟、0 9 * * 1-5 工作日每天 9 点、0 0 1 * * 每月 1 号零点。拿不准就粘到本工具看中文描述和未来执行时间。

Q2 · 为什么我的定时任务没有按预期执行?

按概率排查:① 表达式写错——先用本工具翻译确认语义(最常见是把「周」字段当成「日」的补充条件搞错与/或关系);② 时区问题——服务器是 UTC 而你按北京时间写的(差 8 小时);③ 任务系统重启漏跑、上次任务未结束被跳过。先翻译表达式,再查服务器时区 date 命令。

Q3 · 日和周字段同时指定时是什么关系?

这是 Cron 最反直觉的规则:**日与周同时给定(都不是 *)时是「或」的关系**——匹配任意一个就执行。例如 0 0 1 * 1 是「每月 1 号或每周一」执行,不是「1 号且周一」。只想表达其中一个条件时,另一个保持 *。

Q4 · crontab、Spring、Quartz 三种方言有什么区别?

主要差异三点:① 段数——crontab 5 段(分 时 日 月 周),Spring 6 段(前置秒),Quartz 6 段或 7 段(末位可加年 1970–2099);② 占位符——Quartz 用 ? 表示「日与周不指定」(两字段互斥,需其一为 ?),Spring 不支持 ?(用 *);③ 星期编号——crontab/Spring 是 0/7=周日、1=周一,Quartz 是 1=周日、7=周六(MON 这类名称两边含义相同)。另有 Quartz 专属的 L(最后一天)、W(最近工作日)、#(第几个周 n)。本工具顶部可切换方言,解析与预览全部按所选方言语义执行。

Q5 · Cron 能表达「每 90 分钟」这类间隔吗?

不能精确表达。Cron 基于日历字段匹配,*/90 在分钟字段会被解释为 0 和 30 分(相当于每 30 分钟的取整对齐)。真正的任意间隔要用调度器的 duration 语法(如 Spring 的 fixedDelay)或自己计算。Cron 擅长的是「日历时刻」(每天几点、每周几),不是「均匀间隔」。

嵌入代码

把下面的代码复制到你的网页,即可将本工具嵌入为 iframe(自动隐藏导航与页脚)。

高度px
此工具在你的浏览器本地运行,输入内容不会上传。按 Ctrl K 可随时切换到其他工具。