Skip to content
Scheduling toolReviewed against Vixie cron (1987) & POSIX cron

Cron Expression Parser

A cron expression like 0 9 * * 1-5 describes a recurring schedule — "every weekday at 09:00". This parser handles 5-field and 6-field syntax, expands @aliases (@daily, @hourly, @weekly), validates ranges, and lists the next 10 fire times in your local zone.

Fields
5 (Unix) · 6 (Quartz)
Names
JAN-DEC · SUN-SAT
Aliases
@daily · @hourly …
Fire preview
Next 10 runs

Quick Conversion

Formula: hours = minutes ÷ 60

Clock face with highlighted cron fire minutesA 60-minute clock face. Minutes that the parsed cron expression fires are highlighted as bright dots.:00:15:30:451 fire minute/hrnext: 9:00:00 AM
Runs at minute 0 of at hour 9 on every day-of-month every month on weekdays 1, 2, 3…(5 total).
Next 10 fire times (local)
1. 6/1/2026, 9:00:00 AM
2. 6/2/2026, 9:00:00 AM
3. 6/3/2026, 9:00:00 AM
4. 6/4/2026, 9:00:00 AM
5. 6/5/2026, 9:00:00 AM
6. 6/8/2026, 9:00:00 AM
7. 6/9/2026, 9:00:00 AM
8. 6/10/2026, 9:00:00 AM
9. 6/11/2026, 9:00:00 AM
10. 6/12/2026, 9:00:00 AM

Common cron patterns

Cron field reference

FieldRangeSpecialExample
Minute0-59* / , -*/15 → every 15
Hour0-23* / , -9-17 → business hours
Day of Month1-31* / , -1,15 → 1st & 15th
Month1-12 or JAN-DEC* / , -JUN-AUG → summer
Day of Week0-6 (Sun-Sat) or 7=Sun* / , -MON-FRI → weekdays
Seconds (Quartz)0-59 (optional first field)* / , -*/10 → every 10s

Generate a cron from a calendar grid? Cron generator.

Vixie cron grammar

cron-line = minute SP hour SP dom SP month SP dow field = "*" | range ("," range)* range = number | number "-" number | "*" "/" step step = number

Worked: "0 9 * * 1-5" → minute=0, hour=9, dom=*, month=*, dow=1-5. Fires Mon-Fri at 09:00 — 5 times per week, 260 times per year.

How to read a cron expression

  1. 1Paste any cron expression: 5-field Vixie, 6-field Quartz, or an @alias like @hourly.
  2. 2Read the plain-English description below the input — it spells out the schedule in normal language.
  3. 3Scan the clock SVG: highlighted minutes show when within an hour the job fires.
  4. 4Cross-check with the next-10-fires list — the exact wall-clock times in your local browser zone.
  5. 5Save the snapshot so you can drop the annotated expression straight into a runbook or PR description.

From Bell Labs cron(8) to Kubernetes CronJob — a brief history

In 2026 an SRE auditing a Kubernetes cluster needs to confirm that 0 0 * * 0 in a CronJob spec really does fire at midnight every Sunday — and not 23:59 Saturday in some weird DST corner case. This parser is the sanity check.

cron originated at Bell Labs in 1975 as a daemon to run jobs at specified times. The original 7th Edition UNIX cron read a single crontab file. Per-user crontabs arrived with BSD 4.0 in 1980. The breakthrough was Paul Vixie's "V-3" cron (1987), released to comp.sources.unix — it introduced ranges 1-5, steps */15, month names, and the @aliases that every modern dialect inherits.

POSIX standardised the minimal 5-field cron in IEEE 1003.2 (1992). Vixie's extensions remained de-facto standards — adopted by GNU mcron, fcron, dcron and ISC cron. Linux distros today bundle either Vixie's or its derivatives.

In Java-land, Quartz Scheduler (Terracotta, 2001) introduced the 6-field format with seconds, plus L (last), W (weekday), and # (nth weekday). Spring inherited Quartz. AWS EventBridge cron uses a 7th "year" field. The OR semantics between dom and dow are Quartz's biggest gotcha.

Modern alternatives are emerging. systemd timers (2014) use OnCalendar= with ISO 8601-flavoured syntax — monotonic and DST-aware. Kubernetes CronJob (k8s 1.4, 2016) bundles a Vixie-style parser. Temporal, Airflow, Prefect, and Dagster all accept cron expressions for backwards compatibility but typically pair them with richer schedulers.

Cron's biggest pitfall has always been daylight saving. On 2024-03-10 02:00 EST, the clock jumped to 03:00 EDT, so a job scheduled for 30 2 * * * in America/New_York simply didn't fire. Best practice: run cron on UTC (set TZ=UTC) and translate to local at display time only.

The summary: cron is forty years old, deceptively simple, and still everywhere. The hard part is reading it correctly — which is why we built this parser to spell out every expression in plain English.

Cron parser FAQs

Have more questions? Contact us

Trusted by SREs, backend engineers and schedulers

4.9
Based on 5,070 reviews

Pasting a complex 6-field expression and seeing the next 10 fires made our on-call runbook self-explanatory.

S
Sanjana Iyer
DevOps SRE, Mumbai
April 8, 2026

Catches the OR vs AND between dom and dow that bit us during a Quartz to Vixie migration.

F
Felix Krauss
Backend engineer, Munich
March 22, 2026

Plain-English description side-by-side with the spec saves me on every Jenkins job review.

M
Marcus Adeyemi
Scheduling specialist, Lagos
May 15, 2026

My PG maintenance jobs are now annotated with this tool's output in the source. Massive readability win.

L
Linnea Holm
Database administrator, Helsinki
February 19, 2026

Love using our calculator?

Related developer tools

Learn More

Related Articles

Dive deeper with our expert guides and tutorials related to Cron Expression Parser

Loading articles...