Skip to content

Cron Converter: Unix, Quartz and EventBridge

Pick the dialect you have and the one you need. The converter rewrites the fields, renumbers weekdays, adds or removes the seconds and year fields, and lists every rule that does not carry over instead of guessing.

Local execution

From scheduler

Field rules follow cronie, the Vixie-cron-derived daemon: names, ranges and steps; the day-of-month/day-of-week OR rule applies only when neither field starts with *.

Examples:

minute hour day-of-month month day-of-week (Sunday = 0 or 7)

Runs are listed after this time. Empty = now.

Conditional β€” equivalent only if the conditions below hold

Quartz / Databricks

0 0 9 ? * 2-6

At 09:00, on Monday through Friday.

  • ⚠ Same timezone on both sides: a Unix crontab runs in the server's timezone (or CRON_TZ where the cron daemon supports it), while Quartz runs in the trigger's timezone (Databricks: the job's timezone setting).
  • β„Ή Day-of-week numbers shifted by one: Unix uses 0-6 with Sunday = 0 (7 is also Sunday); Quartz and EventBridge use 1-7 with Sunday = 1.

Latest DevOps articles

What does the cron converter change?

The cron converter rewrites a schedule from one scheduler's syntax to another's β€” Unix crontab (cronie), Quartz (Databricks) or AWS EventBridge β€” and labels the result exact, conditional or unsupported. The three formats look alike but read fields differently. These are the rules it applies:

  • Seconds field. Quartz has one; Unix and EventBridge do not. A Quartz expression only converts when seconds is 0.
  • ? in a day field. Quartz and EventBridge need it in day-of-month or day-of-week; Unix uses *.
  • Sunday 0 vs 1. Unix numbers weekdays 0-6 (7 is also Sunday); Quartz and EventBridge use 1-7. Names like MON are kept as they are.
  • The Unix OR rule. When Unix restricts both day fields and neither starts with *, a day matching either one runs (cronie and Vixie cron). Quartz and EventBridge cannot express that, so the converter stops and says so.
  • L, W and #. Supported by Quartz and EventBridge (L-n and LW are Quartz-only), not by Unix.
  • Year field. Required in EventBridge (1970-2199), optional in Quartz (1970-2099), absent in Unix.
  • rate() and at(). EventBridge only, and not converted: they are interval and one-time schedules, not clock schedules. For rate(), the converter may suggest a clock-aligned alternative and says how it differs.

How to use

  1. Choose the dialect of your expression under From and paste it.
  2. Choose the dialect you need under To.
  3. Read the outcome β€” exact, conditional or unsupported β€” and the conditions and notes under the result. They cover timezone and weekday-numbering changes that a correct-looking expression can hide.
  4. Set the timezone and a reference date, then compare the next runs of the source and the result side by side. Copy the result when they match.

Conversion examples

From β†’ ToResult
0 9 * * 1-5 (Unix)Quartz 0 0 9 ? * 2-6 Β· EventBridge cron(0 9 ? * 2-6 *)
*/15 * * * * (Unix)Quartz 0 */15 * * * ? Β· EventBridge cron(*/15 * * * ? *)
0 0 1 * * (Unix)Quartz 0 0 0 1 * ? Β· EventBridge cron(0 0 1 * ? *)
0 0 12 ? * MON-FRI (Quartz)Unix 0 12 * * MON-FRI Β· EventBridge cron(0 12 ? * MON-FRI *)
0 15 10 ? * 6L (Quartz)EventBridge cron(15 10 ? * 6L *) Β· Unix: not possible (L)
rate(15 minutes) (EventBridge)Not converted: interval schedule. Suggests */15 * * * * as a clock-aligned alternative
0 9 1 * 1 (Unix)Not possible: day-of-month OR day-of-week

Migrating a whole crontab

For a step-by-step checklist β€” timezone, DST, weekday numbering and schedules that need splitting β€” read Migrating cron schedules to Databricks (Quartz) and EventBridge without surprises. To check a single expression, use the Quartz validator or the EventBridge validator.

FAQs

How do I convert a Unix cron expression to Quartz?

Add a seconds field of 0 at the front, put ? in whichever day field is *, and add 1 to each day-of-week number (Unix Sunday = 0, Quartz Sunday = 1). 0 9 * * 1-5 becomes 0 0 9 ? * 2-6. The converter does all three steps.

Why does the converter refuse some expressions?

Because there is no exact equivalent. Examples: Unix 0 9 1 * 1 runs on the 1st OR on Mondays, which Quartz and EventBridge cannot express in one schedule; Quartz L, W and # have no Unix form; and Unix and EventBridge have no seconds field. The error says which rule blocked it.

Can rate() be converted to cron?

No. rate() runs at a fixed interval counted from when the schedule starts, while cron runs at clock times, so the converter marks it unsupported. When the interval divides the hour or day evenly it suggests a clock-aligned alternative β€” for rate(15 minutes), */15 * * * * β€” and says that it is a different schedule. One-time at() schedules are not converted either.

What do exact, conditional and unsupported mean?

Exact: the fields mean the same thing. Conditional: the result matches the source only if the listed conditions hold β€” for every cross-scheduler conversion that includes running both in the same timezone. Unsupported: there is no equivalent expression, and the errors say why. The run comparison below a result is a diagnostic over the next few runs, not a proof of equivalence.

Does converting change the timezone?

No. The converter keeps the hours as written and warns you: EventBridge scheduled rules run in UTC, Quartz runs in the trigger's timezone (for Databricks, the job's timezone), and a Unix crontab runs in the server's timezone.