日期与时间

Quartz Cron 生成器 · 先核对日期,再配置触发器

解析 Java Quartz 表达式,编辑秒和可选年份,并在指定时区预览匹配日期。

Quartz Cron 生成器

表达式

输入仅在当前浏览器中处理,不会发送到服务器。

字段说明与匹配日期

选项

填写含秒的 ISO 日期时间。无时区后缀时使用所选 IANA 时区;歧义或不存在的当地时间必须写 Z 或偏移量。当地起点年份为 1970–2099。

跳过夏令时不存在的钟点;重复钟点取较晚偏移,但不把当地字段倒回起点之前。浏览器与 JVM 的时区数据及触发器设置可能不同。

最多 512 个 UTF-16 单元、1–1,000 次日期;最多十个当地日历年且不超过 2099 年。计算超过五秒终止。

字段构建器

字段编辑只改变草稿,预览并应用后才替换原式。

0 0 9 ? * MON-FRI

秒、分 0–59;时 0–23;日 1–31;月 1–12;星期 1=周日、7=周六;年 1970–2099,留空省略。日与星期恰好一个为 ?。

Java Quartz 2.3.2 常用子集:列表、范围、数字步长、?、L、L-n、LW、nW、nL、n#k。特殊日期项单独使用,不支持名称步长、混合类型范围或 L-nW。

输入或选项已更改,请更新结果后再导出。

Quartz Cron 生成器适合核对“每月最后一个工作日”或“第三个星期五”这样的日历条件。它们不能靠给 Linux 的五段表达式补一个秒字段来验证;在触发器投入使用前,看一组实际日期比只数星号更可靠。

已有表达式可以读回字段草稿,也可以从相对日期示例开始构造 Quartz Cron 表达式。本页同时提供 Cron 表达式解析、Cron 表达式校验和下次执行时间预览;语法通过与预览数量足够是两个独立结果。

为什么使用 Quartz Cron 生成器

保留日与星期的原始意图

Quartz Cron 生成器要求“日”和“星期”恰好有一个填写 ?。同时指定两者时,页面指出冲突,不会偷偷清掉其中一个条件。你可以在草稿里选择要保留的约束,查看替换预览之后再应用。

同一输入分成日与星期两条条件路径,仅一条被选中,另一条保持未激活。

看清月末和工作日的差别

L 取日历中的最后一天,LW 取当月最后一个周一至周五。如果月底是周日,两个规则会给出不同日期。用日期列表核对结算或报表规则,可避免把“工作日”误当成固定的月末。

两个相同的日历分别标出月底的周日和此前的周五,周末列带有底色。

让字段草稿与预览参数对应起来

01

先读回字段,再决定是否替换

“载入字段”把当前表达式解析到草稿;选择示例也只改变草稿,不会立即覆盖输入。年份留空生成六段,填写年份生成七段。预览会列出表达式和参数改动数量,应用后可以一次撤销,同时恢复旧输入和结果。

02

给起点明确的时间含义

初始示例从 UTC 的 2026 年 1 月 1 日开始。“当前时间”先生成待确认的起点。日期时间必须含秒;没有时区后缀时按所选 IANA 时区理解。遇到夏令时缺失或重复的当地时间,需写 Z 或明确偏移量。

03

先看匹配数量,再导出

页面先显示 50 次,再按 50 次展开;复制包含完整报告,下载得到 JSON。自动预览等待 350 ms,关闭后可点解析按钮或按 Ctrl/Cmd + Enter。输入、时区、起点或数量一变,旧结果的导出会立即禁用。

检查决定执行日期的条件

秒字段必填,年份可以省略

六个必填字段依次为秒、分、时、日、月、星期,第七个字段才是年份。规范表达式保留是否显式填写年份的区别。报告逐字段显示范围和特殊条件,帮助定位把秒与分钟错位的输入。

相对日期按实际月份计算

L-n 从月末向前数 n 天;nW 找同月内离指定日期最近的周一至周五;nL 找最后一个指定星期;n#k 找第 k 个。比如 FRI#3 是第三个星期五,6L 是最后一个星期五,两者并不总是同一天。

跨界范围与字段内步长

小时 22-2 跨越午夜,月份 NOV-FEB 跨越年末。分钟 5/15 选择 5、20、35、50,进入下一小时重新开始,并非从某一刻起永久每隔 15 分钟。数字范围可搭配步长,年份范围必须正序。

每个预览日期都保留时区信息

结果同时给出当地日期时间、UTC 偏移和 UTC 瞬间,并保留搜索起点与截止时间。匹配稀疏的表达式会显示“找到数量 / 请求数量”;合法表达式没有匹配日期时,不会伪装成已找到全部结果。

支持的方言与实际边界

按 Java Quartz 2.3.2 常用子集处理
只接受一行六段或七段表达式,最多 512 个 UTF-16 单元。不是 Spring、Quartz.NET、AWS 或 Jenkins 的自动转换器。秒和分为 0–59,小时为 0–23,月为 1–12;星期 1 是周日、7 是周六。日与星期恰好一个用 ?。
特殊日期选择器必须单独使用
日字段支持 L、L-1 至 L-30、LW、1W 至 31W;星期支持单独 L(周六)、nL 和 n#1 至 n#5。不接受特殊项混合列表、多组 # 或 L-nW。这类复合需求需重新拆分触发条件,不会自动替你改写。
名称范围与数字步长分开处理
JAN–DEC、SUN–SAT 不区分大小写。范围两端必须同为数字或同为名称;带名称的步长及名称与数字混合范围均拒绝。比如 JAN-MAR/2 应改成数字步长或明确列表,避免依赖 Java 解析器对后缀的意外处理。
缺失日期跳过,搜索有截止点
31 日、31W 或第五个星期几在某月不存在时跳过该月,不补到月底。W 只代表周一至周五,不识别节假日。年份和当地起点限 1970–2099,最多搜索起点后的十个当地日历年、返回 1,000 次,计算五秒后终止。
预览不包含触发器运行策略
夏令时跳过的钟点不触发;重复钟点通常取较晚偏移,但不会把当地字段倒回起点之前。浏览器与 JVM 时区数据可能不同。节假日排除、misfire 补跑、重试、并发与任务执行属于调度器配置,本页不模拟这些行为。

Quartz Cron 生成器常见问题

Linux Crontab 和 Quartz Cron 有什么区别?

Java Quartz 必须有秒字段,还可以有年份字段;星期编号和日、星期条件的组合方式也不同。Linux 的五段规则不能仅在前面补 0 就保证等价。这里不猜测输入方言,五段表达式会提示字段数错误。

Cron 表达式里的 * 和 ? 有什么区别?

* 选中该字段所有值,? 表示不给该日字段指定条件。每个工作日九点可写 0 0 9 ? * MON-FRI;每天九点可写 0 0 9 * * ?。问号只可出现在日或星期字段,而且必须恰好出现一处。

为什么需要查看最近执行时间?

语法能通过,不代表日期符合业务意图。例如 31W 会跳过没有 31 日的月份,LW 却每月都有一个最后工作日。先固定时区和起点,再比较日期与返回数量,才能发现月份缺口或把星期编号写错的问题。

怎样让 Quartz 每天零点执行?

使用 0 0 0 * * ?,三个开头的 0 分别表示秒、分、时。它取所选时区的当地零点,不是固定每隔 24 小时。需要限定某一年时,可在末尾加第七个年份字段,触发器自身的时区也应一致。

怎样在每月最后一天执行?

日字段填写 L,例如 0 0 9 L * ? 表示当地时间月末九点。该规则随月份长短和闰年变化;如果需要最后一个周一至周五,用 LW。两者都不等同于排除法定节假日后的最后营业日。

执行时间不符合预期?

把确认过的日期规则交给触发器

用 Quartz Cron 生成器核对字段、时区和实际返回的日期,再把表达式写入对应的 Java Quartz 配置。生产环境仍需核对触发器的时区与补跑策略。

匹配日期是预览结果,不是任务已经执行的证明。