跳到正文
CronExplain

Quartz Cron 表达式解析器

Quartz Scheduler 是许多 Java 应用背后的任务调度库,它的 Cron 格式比 Unix crontab 更丰富。在下方粘贴 Quartz 表达式,即可看到中文解释、下次运行时间,并转换为其他方言。

含义

Quartz:第一位为秒,可选年字段,1 = 星期日。“日”和“星期”中必须恰好有一个为“?”。支持 L、W 和 #。

✓ 有效 · 含义

在12:00, 星期一至星期五

预设

接下来 10 次运行

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

其他方言中的同一调度

  • 标准 crontab0 12 * * 1-5
  • AWS EventBridgecron(0 12 ? * MON-FRI *)EventBridge 规则使用 UTC。
  • Spring0 0 12 * * MON-FRI

可视化生成器

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

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

Quartz Cron 格式

Quartz 表达式有六或七个字段:秒、分钟、小时、日、月、星期以及可选的年。例如 0 0 12 ? * MON-FRI 表示工作日中午 12 点触发。星期编号为 1(星期日)到 7(星期六),也可以使用 MON、FRI 等英文缩写,范围中同样适用。

问号规则

Quartz 不允许同时限定“日”和“星期”。这两个字段中必须恰好有一个为“?”,表示“不指定值”。因此 0 0 12 * * MON 是无效的,应写成 0 0 12 ? * MON。解析器会立即指出这类错误。

特殊字符 L、W 和 #

L 表示“最后”:在“日”字段中 L 是当月最后一天,L-3 是最后一天的前三天;在“星期”字段中 6L 表示当月最后一个星期五。W 表示离指定日期最近的工作日且不会跨月,因此 15W 会在离 15 日最近的工作日触发,LW 表示当月最后一个工作日。井号用于选择第 n 个星期几:6#3 表示第三个星期五。

Quartz 实战

在 Java 代码中,Quartz 表达式挂在触发器上,例如 TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 ? * MON-FRI").inTimeZone(TimeZone.getTimeZone("Asia/Shanghai")))。不调用 inTimeZone 时使用 JVM 的默认时区。错过触发(misfire)策略决定调度器在计划时间宕机时的行为:立即补触发一次,或直接跳到下一个时间点。

常见问题

Quartz Cron 和 Unix Cron 有什么区别?
Quartz 在开头增加了秒字段、末尾可选年字段,星期从 1 = 星期日开始编号,要求“日”或“星期”之一为“?”,并支持 L、W 和 #。
能把 Quartz 表达式转换成 crontab 吗?
可以,只要秒为 0、没有设置年,且没有使用 L、W 或 #。转换器会给出等价的 crontab 表达式,或说明无法转换的原因。
0 0/5 * * * ? 是什么意思?
表示每 5 分钟触发一次:每天每小时从第 0 分钟开始,在第 0 秒触发。
Spring 的 @Scheduled cron 和 Quartz 一样吗?
非常相似,但 Spring 用 0 或 7 表示星期日、没有年字段,也不强制使用“?”。Spring 表达式请使用 Spring 页面。