zerouploads

Cron Expression Generator & Parser

Build a cron expression by clicking, or paste one and read it in plain English with the next runs listed.

  • Preview
  • Unlimited
  • No signup
  • Private
  • Works offline

Build and read a cron expression

Valid

In words Every 6 hours, Monday through Friday.20 runs / week

FieldValueExpands toMeaning
Minute00every hour at :00
Hour*/60,6,12,18every 6 hours
Day of month*every valueevery day
Month*every valueevery month
Day of week1-5Mon-Friweekdays only

Next runsGMT+6

  1. 00:00
  2. 06:00
  3. 12:00
  4. 18:00
  5. 00:00
  6. 06:00

next in 5 h 11 m · 20 runs this week

Build a field by clicking

Hour fieldclick to toggle · hour 4 selected

How to read the expression

0 */6 * * 1-5 · valid crontab, Quartz and Kubernetes CronJob syntax shown on copy

0 */6 * * 1-5

How it works

  1. 01

    Build or paste

    Click the hour and weekday grids to build an expression, or paste one you already have.

  2. 02

    Read it back

    Each field is expanded to the values it really matches, and the whole thing is described in a sentence.

  3. 03

    Check the next runs

    Six upcoming runs in the time zone you pick, so a mistake shows up before it ships.

The traps in cron syntax

Two fields catch almost everyone. Day of month and day of week are ORed, not ANDed. An expression with both set runs on either condition, so 0 0 13 * 5 fires on the 13th of every month and on every Friday. It is not Friday the 13th. Leave one of them as a star unless you want both.

A step counts from the start of its range rather than from zero. In the hour field, */7 means 0, 7, 14 and 21, then a five-hour gap over midnight. It is not a clean seven-hour cycle. The expansion column shows the values, which is the quickest way to catch this.

Time zones are the other repeat offender. Most cron daemons run in the server time zone. A job set for 02:30 then runs twice, or not at all, on the night the clocks change. If it must run exactly once, put it outside the 01:00 to 03:00 window, or run the daemon in UTC.

Dialects
Standard 5-field crontab, 6-field with seconds, and Quartz or Spring.
Special strings
@hourly, @daily, @weekly, @monthly, @yearly and @reboot are all recognised.
Time zones
Next runs in any IANA zone, with daylight saving handled properly.
Validation
Values out of range, backwards ranges and dates like 31 February are refused.

Frequently asked questions

Why does my expression run more often than I expect?
Usually the day-of-month and day-of-week fields. Cron ORs them rather than ANDing them, so setting both makes the job run on either match. Leave one as a star unless you want both.
What does */5 actually mean?
Every fifth value counting from the start of the field, not every five units of elapsed time. In the minute field that is :00, :05, :10 and so on, which is what most people expect.
Is 0 or 7 Sunday?
Both are. Cron accepts 0 and 7 for Sunday, which is why the range reads 0-7. This tool turns 7 into 0 so the expansion never lists Sunday twice.
Does it handle Quartz syntax?
It parses the 6-field and 7-field forms and the ? marker. The L, W and # markers are recognised and refused, because working out their next runs is not built yet.
What happens at a daylight saving change?
A time that never happened is skipped, so a daily 01:30 job does not run on the morning the clocks go forward. The projection shows the gap rather than hiding it.
Is my expression sent anywhere?
No. Parsing and the projection run in this tab. Nothing about your servers or your schedule leaves the machine.
Browse all developer tools