跳到正文
CronExplain

Cron 表达式解析与生成器

粘贴任意 Cron 表达式,即可获得通俗易懂的中文解释、任意时区下接下来 10 次运行时间,以及转换为 Quartz、AWS 和 Spring 语法后的同一调度。所有计算都在你的浏览器中完成。

含义

识别为:标准 crontab · 五个字段:分钟、小时、日、月、星期。星期日为 0 或 7。若“日”和“星期”都有限定,只要其中一个匹配就会运行。

✓ 有效 · 含义

每隔 15 分钟, 在 09:00 和 17:59 之间, 星期一至星期五

预设

接下来 10 次运行

#UTC 时间你的本地时间
1——
2——
3——
4——
5——
6——
7——
8——
9——
10——

其他方言中的同一调度

  • Quartz0 */15 9-17 ? * MON-FRI
  • AWS EventBridgecron(*/15 9-17 ? * MON-FRI *)EventBridge 规则使用 UTC。
  • Spring0 */15 9-17 * * MON-FRI

可视化生成器

为每个字段选择取值。生成器输出标准的五字段表达式,使用时会自动转换为当前选择的方言。

分钟
小时
日
月
星期
0 9 * * 1-5

如何阅读 Cron 表达式

经典的 Unix Cron 表达式由空格分隔的五个字段组成:分钟(0–59)、小时(0–23)、日(1–31)、月(1–12)和星期(0–6,其中 0 和 7 都表示星期日)。当前时间与所有字段都匹配时任务就会运行。星号表示“任意值”,所以 * * * * * 表示每分钟运行一次。

在一个字段内可以组合多个值:逗号表示列表(1,15),连字符表示范围(9-17),斜杠表示步长(*/10 表示每隔 10 个单位)。大多数实现也接受 JAN、MON 这样的月份和星期英文缩写。

为什么方言很重要

并不是所有调度器都使用同一种 Cron。Quartz 和 Spring 在最前面增加了秒字段,AWS EventBridge 在最后增加了年字段,而且 Quartz 和 AWS 的星期从 1 = 星期日开始编号,而不是 0。Quartz 和 AWS 还要求“日”或“星期”字段之一必须为问号。CronExplain 会根据表达式的结构自动识别方言,你也可以随时手动切换。

下次运行时间与时区

运行时间列表按你所选时区的本地挂钟时间计算,并在旁边显示对应的本地时间。夏令时的处理方式与大多数调度器一致:时钟拨快时被跳过的时间当天不会运行,时钟拨回时重复出现的时间只运行一次。GitHub Actions 和 AWS EventBridge 规则始终使用 UTC,因此在这两种方言下工具会自动切换到 UTC。

可视化生成表达式

如果你更喜欢点选而不是手写,可以使用可视化生成器:为每个字段选择“每个”“每隔 N”或指定值,然后复制结果。预设覆盖了最常见的调度,从每 5 分钟到每月第一天都有;每个结果都可以通过链接分享,表达式会保存在 URL 中。

常见问题

*/5 * * * * 是什么意思?
表示每 5 分钟运行一次:每天每小时的第 0、5、10 分钟……依此类推。*/5 从该字段的最小值(0)开始,每次加 5。
Cron 中星期日是 0 还是 7?
在标准 crontab、Kubernetes、GitHub Actions 和 Spring 中,0 和 7 都表示星期日。在 Quartz 和 AWS EventBridge 中,一周从 1 = 星期日到 7 = 星期六,因此 0 是无效值。
同时设置“日”和“星期”会怎样?
标准 Cron 只要其中一个字段匹配就会运行,所以 0 0 13 * 5 会在每月 13 日以及每个星期五运行。Quartz 和 AWS 不允许同时设置,所以其中一个必须是“?”。
Cron 使用哪个时区?
crontab 使用服务器本地时区;Kubernetes 默认使用控制器所在时区,除非设置了 spec.timeZone;GitHub Actions 和 EventBridge 规则使用 UTC。在工具中选择时区即可查看准确的运行时间。
我的表达式会被发送到服务器吗?
不会。解析、文字说明和运行时间计算都在你的浏览器中完成,你输入的内容不会离开你的设备。