在线 Cron 表达式生成器

可视化选择秒、分、时、日、月、周,实时生成 Linux crontab 与 Quartz 表达式,附中文解释与接下来 5 次执行时间;也能粘贴已有表达式反查。

参数

crontab、大多数 Linux 计划任务用 5 段;Java 的 Quartz、Spring @Scheduled(cron=...) 用 6 段(最前面多一位「秒」)。

常用场景(点一下直接填好)
表达式*/5 * * * *
分每 5 分钟(0–59)
时每小时(0–23)
日每天(1–31)
月不限(1–12)
周不限(0–6)
支持 * 数字 逗号 区间(-) 步长(/) ?(Quartz 日/周) L(Quartz 月末)。不支持 W、#、英文缩写与年份段。
这个表达式什么时候跑
  1. 2026-10-28 16:30:00
  2. 2026-10-28 16:35:00
  3. 2026-10-28 16:40:00
  4. 2026-10-28 16:45:00
  5. 2026-10-28 16:50:00
按你电脑的本地时区计算。夏令时切换日可能与服务器有偏差。
已有表达式?粘过来反查
解析成功会把上面 6 个字段替换成该表达式的值。

这个工具做什么

Cron 表达式生成器把「写定时任务」这件事变回可视化:每个字段单独选,表达式实时拼出来,旁边直接告诉你它是什么意思、接下来五次什么时候跑。

它同时支持两套语法——Linux crontab 的 5 段(分 时 日 月 周)和 Quartz / Spring @Scheduled 的 6 段(最前面多一位「秒」)。这两套最容易混淆的不是段数,而是「日」和「周」的关系:Linux 里两者同时限制是「或」,Quartz 里用 ? 表示不指定、两者是「与」。本工具按各自规范分别实现。

除了生成,它也支持反向:把线上正在跑的那条表达式粘进来,立刻翻译成人话并算出下次执行时间——排查「为什么任务没跑」时这一步最有用。

如何使用

  1. 先选方言 crontab、多数 Linux 计划任务用 5 段;Java 的 Quartz、Spring 的 @Scheduled(cron = ...) 用 6 段。选错了段数,表达式在任何一边都跑不起来。
  2. 逐字段选或直接改 每个字段都有常用预设(每 5 分钟、整点、工作日、月末……),点一下就填进去;也可以直接在输入框里写 1-30/2 这种精确写法。字段下方会实时回显它的含义,写错立刻标红。
  3. 看下次执行时间再复制 「这个表达式什么时候跑」给出接下来五次执行时间——这是最省事的自检方式:如果列表是空的,说明日与月互相矛盾(比如 2 月 30 日)。确认无误后复制表达式,或下载一份 .txt 报告留档。

常见问题

5 段和 6 段到底差在哪?

只差最前面一位「秒」。Linux crontab 是「分 时 日 月 周」,Quartz 是「秒 分 时 日 月 周」。把 5 段的表达式直接贴进 Quartz 会被当成「秒=分」而错位,所以一定要先选对方言。

为什么「每月 1 号」还会在周一跑?

因为 Linux cron 在「日」和「周」都被限制时取「或」,不是「与」。要只按日期跑,把「周」写成 *;要只按星期跑,把「日」写成 *。Quartz 则用一个 ? 把不关心的那一项留空。

下次执行时间是空的怎么办?

说明这个组合在接下来 8 年里不存在。最常见的是日期越界(2 月 30 日、4 月 31 日),其次是「日」和「周」互相锁死。先确认月份的天数,再把其中一个改成 * 试试。

支持 W、#、英文缩写吗?

不支持,而且不会假装支持——这些写法会被明确报错。原因是个平台实现差异很大(W 在 Quartz 与部分 Linux 实现里行为不同),含糊支持比不支持更危险。月份与星期请用数字。

时间按哪个时区算?

按你浏览器的本地时区。如果你的服务器在别的时区(或容器里是 UTC),实际触发时间会和这里显示的不一样——部署前记得核对服务器时区,夏令时切换那天尤其容易差一小时。

表达式会被上传吗?

不会。解析、解释与时间计算全在浏览器内完成,页面没有任何上传请求。表达式里可能带上业务信息(比如特定日期),本地处理更省心。

限制与边界

只支持 * 数字 逗号 区间 步长,以及 Quartz 的 ? 与 L;不支持 W、#、英文缩写与年份段。

只按浏览器本地时区计算,不做时区换算;夏令时切换日可能与服务器实际触发时间相差一小时。

不校验业务合理性(例如「每 5 分钟跑一次」是否会压垮数据库),只校验语法与时间是否存在。

相关工具