cronkit.org
Cron expressions, explained and converted — in your browser

Cron tools › Explain / Test

Cron expression diff

A vs B · across dialects · first divergence · 4-year equivalence check

Are these two cron expressions the same schedule? Compare them run by run in any time zone — even a Linux line against its Quartz or Kubernetes version — and see exactly which runs only one of them has.

Classic near-misses

Differences

Equivalent?

How to compare two cron expressions

  1. Enter expression A and B, and set each one's Dialect — they can differ, so a Linux line can be checked against the Quartz or AWS line meant to replace it.
  2. Pick the Time zone both run in and a Window: the next 24 hours, 7 days, 30 days or 365 days.
  3. Read the counts: runs only in A, only in B, and shared. The first difference and the time it happens are in the line under the verdict.
  4. Check the Differences table for the first 20 runs that only one expression has.
  5. Read Equivalent?: it compares every day of the next four years, not just the window, and says exactly what range it checked.

Near-misses the presets demonstrate

ABWhy they differ (or don't)
0 0 1-7 * 10 0 0 ? * MON#1 (Quartz)Linux cron ORs the two day fields, so A runs on days 1 to 7 and on every Monday. B is the real first Monday.
*/7 * * * *0,7,14,…,56 * * * *The same schedule. */7 is a list that restarts every hour, so :56 is followed by :00 after 4 minutes.
0 9 * * 1-50 0 9 ? * 1-5 (Quartz)Quartz numbers the week from 1 = Sunday: B runs Sunday to Thursday.
0 0 */2 * 1the same, in KubernetesVixie cron ANDs when a day field starts with *; Kubernetes only does for a bare *, so it ORs.
0 0 * * 00 0 * * 7The same in Linux cron: 0 and 7 are both Sunday.
5/15 * * * * (Kubernetes)5-59/15 * * * *The same: Kubernetes reads N/step as N-59/step; Linux cron needs the range written out.

What "equivalent" means here

Two schedules are the same if they fire at the same instants. The check walks every day from today through four years ahead: on each day it asks whether A fires, whether B fires, and whether their hour, minute and second sets match. On days the clocks change in the chosen zone it compares the actual runs one by one, because a fixed-time job and a wildcard job are treated differently in a skipped or repeated hour. The result says what it checked — the date range and the number of runs — rather than claiming a proof for all time. For a closer look at one expression's calendar, open the schedule visualizer.

FAQ

Can I compare expressions from different schedulers?

Yes. Each side is parsed with its own dialect's rules — field layout, day-of-week numbering, ?, L, W, # and how the day fields combine — and then both are compared as run times in the same zone.

Why do the counts say "field arithmetic" sometimes?

When a window holds more than about 40,000 runs (a per-minute or per-second schedule over a month or a year), listing each run would be slow, so the counts are computed from the fields in wall-clock time. The differences listed are still exact times.

Why would two expressions that look different be equivalent?

Cron has several spellings for the same set: */15 and 0,15,30,45, 0 and 7 for Sunday, @daily and 0 0 * * *. A range that covers a whole field, like 1-31, is the same set as * — but in Linux cron it changes how the day fields combine, which this tool takes into account.

Does a time zone change the answer?

It can. Two schedules that agree in UTC can differ in a local zone on the days the clocks change, and a comparison window is measured in real time. Pick the zone the scheduler actually uses.