Cron tools › Explain / Test
Cron expression diff
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
- 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.
- Pick the Time zone both run in and a Window: the next 24 hours, 7 days, 30 days or 365 days.
- 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.
- Check the Differences table for the first 20 runs that only one expression has.
- 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
| A | B | Why they differ (or don't) |
|---|---|---|
| 0 0 1-7 * 1 | 0 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-5 | 0 0 9 ? * 1-5 (Quartz) | Quartz numbers the week from 1 = Sunday: B runs Sunday to Thursday. |
| 0 0 */2 * 1 | the same, in Kubernetes | Vixie cron ANDs when a day field starts with *; Kubernetes only does for a bare *, so it ORs. |
| 0 0 * * 0 | 0 0 * * 7 | The 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.