Skip to content
Dialect

Quartz

Build 6- and 7-field Quartz cron expressions with seconds, the ? wildcard, L/W/# modifiers, and a live next-run preview.

Last verified: 2026-05-15

Six fields, optionally seven

Quartz cron has six required fields and one optional field: second minute hour day-of-month month day-of-week [year]. The leading second field is what distinguishes Quartz from Unix cron, and the optional year field at the end is unique to Quartz.

Day-of-week numbering

Quartz uses 1 = SUN, 2 = MON, …, 7 = SAT. This is one off from Unix cron (where 0 = SUN, 6 = SAT) and is the most common source of mistakes when porting expressions between platforms. cronpreview translates automatically when you switch dialects.

The ? wildcard

Quartz requires that you use ? in either day-of-month or day-of-week — but not both. The reason: specifying both a day-of-month and a day-of-week is ambiguous, so Quartz forces you to pick one. 0 0 9 * * MON-FRI is invalid; 0 0 9 ? * MON-FRI is correct.

L, W, # — special characters

  • L (last) — L in day-of-month means "last day of month".6L in day-of-week means "last Friday of month".
  • W (weekday) — 15W means "the weekday nearest to the 15th".
  • # (nth) — MON#1 means "the first Monday of the month".

Quartz vs. Quartz.NET vs. Spring

The original Quartz Scheduler (Java) and the C# port Quartz.NET have a few quiet differences — Quartz.NET allows * in both day-of-month and day-of-week (treats both as wildcards), while strict Quartz rejects it. Spring's @Scheduled(cron=...) uses Quartz-flavored 6-field syntax but with its own minor differences in step behavior. Always test against the runtime you actually deploy on.

Found something inaccurate? Let us know via the contact form.

Try it

loading builder…

Related recipes

Read next