Quartz Cron Guide

Quartz Cron表达式:6段、7段与特殊字符

从字段顺序到问号、L、W、#,完整理解Quartz定时规则,并用真实未来时间验证表达式。

Quartz Cron表达式结构

Quartz Cron通常由6个必填字段和1个可选年份字段组成。与Linux Crontab不同,它的第一段是秒,因此不能直接把五段表达式复制到Quartz中使用。

秒  分  时  日  月  周  [年]
0   30  9   ?   *  MON-FRI *
字段范围常用字符
0–59* , - /
分钟0–59* , - /
小时0–23* , - /
日期1–31* ? , - / L W
月份1–12或JAN–DEC* , - /
星期1–7或SUN–SAT* ? , - / L #
年份1970–2199* , - /
Quartz中日期和星期通常不能同时限定。需要按星期执行时,把日期写成 ?;需要按具体日期执行时,把星期写成 ?

Quartz特殊字符

问号(?)

问号只用于日期或星期字段,表示“不指定”。例如 0 0 9 ? * MON-FRI 表示周一至周五上午9点,日期字段不参与判断。

L:最后

日期字段中的 L 表示当月最后一天;L-2 表示倒数第3天。星期字段中的 6L 可表示当月最后一个星期五。

W:最近工作日

15W 表示距离15日最近的周一至周五。如果15日是星期六,通常选择14日星期五;如果是星期日,通常选择16日星期一,并且不会跨月。

#:第几个星期几

MON#2 表示当月第二个星期一,适合工资结算、月度报表和固定周次会议。

Quartz常用表达式

表达式含义验证
0 0/5 * * * ?每5分钟计算时间
0 0 12 * * ?每天12点计算时间
0 0 9 ? * MON-FRI工作日上午9点计算时间
0 0 9 L * ?每月最后一天9点计算时间
0 30 9 ? * MON#2每月第二个星期一9:30计算时间

常见错误

  • 把Linux五段表达式直接用于Quartz,导致秒、分钟和小时整体错位。
  • 日期与星期同时填写具体值,没有使用问号解除其中一个限制。
  • 把星期编号按照Linux的0–6理解,而Quartz通常采用1–7。
  • 只检查语法是否通过,没有结合时区和未来运行时间验证真实结果。
最佳实践是同时保存表达式类型和时区,而不只是保存表达式字符串。

示例结果由本站 Cron 解析引擎验证。