Developer

Encoders, converters & dev utilities

12 tools
Developer · United States

Cron Expression Generator & Explainer

Build & explain cron expressions — plain English, next run times & multiple schedulers. Accurate, instant and free — for United States.

100% in-browser — nothing is uploaded

Your expression is parsed, explained and previewed entirely in your browser — it is never sent to a server. Works offline once loaded.

In plain English

At 09:00, on Monday through Friday.

Next 5 run times (UTC)
Calculating…
Use it in your scheduler
crontab
0 9 * * 1-5  /path/to/job.sh
Kubernetes CronJob
spec:
  schedule: "0 9 * * 1-5"
Spring @Scheduled
@Scheduled(cron = "0 0 9 * * 1-5")
AWS EventBridge
cron(0 9 * * 1-5 *)
GitHub Actions
on:
  schedule:
    - cron: "0 9 * * 1-5"
The five Unix fields
#FieldAllowed values
1Minute0–59
2Hour0–23
3Day of month1–31
4Month1–12 or JAN–DEC
5Day of week0–7 or SUN–SAT (0 & 7 = Sun)

Operators: * (every), , (list), - (range), / (step). Aliases like @daily and @hourly also work.

The day-of-month / day-of-week OR-gotcha

In Unix cron, when both the day-of-month and day-of-week fields are restricted (neither is *), the job runs if either matches — a union, not an intersection. So 0 0 1 * MON fires on the 1st of every month AND every Monday, not only when the 1st is a Monday. This preview honours that rule. Quartz and AWS avoid the ambiguity by forcing a ? in one field.

Cron uses no year — pair it with timestamps

Cron schedules recur forever and carry no absolute date. Debugging a specific run instant or a JWT's exp claim? Convert it with the Epoch / Unix Timestamp Converter. Note that classic Unix cron runs in the server's local timezone, while AWS EventBridge always uses UTC.
Basics

The five cron fields

A standard Unix cron expression is five space-separated fields — minute, hour, day-of-month, month and day-of-week. Each field is a value, a list (,), a range (-), a step (/) or *for "every".

0 9 * * 1-5 at a glance
Minute
0
Hour
9
Day of month
* (any)
Month
* (any)
Day of week
1-5 (Mon–Fri)
Means
At 09:00, Mon–Fri

Values & lists

* ,

* = every; 1,15 = the 1st and 15th.

Ranges

-

1-5 in day-of-week = Monday through Friday.

Steps

/

*/15 in minutes = every 15 minutes.

The critical rule

The day-of-month / day-of-week OR-union

The single most misunderstood thing in cron: when both the day-of-month and day-of-week fields are restricted (neither is *), the job runs when either matches — a union, not an intersection. If only one is restricted, only that one gates.

0 0 1 * MON

Both days restricted

Runs on the 1st of every month OR any Monday — not only when the 1st is a Monday.

0 9 * * 1-5

Only day-of-week restricted

Day-of-month is *, so only the weekday gate applies: 09:00 Monday–Friday.

Why Quartz and AWS force a ?

Because the union rule is surprising, Quartz and AWS EventBridge require a ?in one of the two day fields to say "no restriction here" — removing the ambiguity by design. Unix has no ?; the OR-behaviour is the underlying cause and this tool's next-run preview honours it.
Dialects

Unix vs Quartz vs AWS, aliases & timezones

Schedulers parse cron differently. Using the wrong dialect is a common source of jobs that never fire — or fire at the wrong time.

Unix / crontab

5 fields

minute hour dom month dow. 0 and 7 both = Sunday. Supports @daily aliases.

Quartz / Spring

6–7 fields

Adds a leading seconds field + optional year; 1 = Sunday; adds ? L W #.

AWS EventBridge

6 fields, UTC

cron(min hour dom month dow year), always in UTC, needs a ? in one day field.

Aliases and timezone behaviour

Unix accepts nicknames: @yearly, @monthly, @weekly, @daily and @hourly. Classic Unix cron runs in the server's local timezone, AWS EventBridge is UTC, and a Kubernetes CronJob uses spec.timeZone if set. Preview the next runs in the zone you actually care about.
FAQ

Frequently asked questions

A standard Unix cron expression has five space-separated fields, in this order: minute (0–59), hour (0–23), day-of-month (1–31), month (1–12 or JAN–DEC) and day-of-week (0–7 or SUN–SAT, where both 0 and 7 mean Sunday). For example, 0 9 * * 1-5 means "at 09:00, Monday through Friday". Each field can be a single value, a list, a range or a step. Quartz and AWS add extra fields (seconds, and optionally year), which is why their expressions look longer.

An asterisk * means "every" value. A comma , is a list (1,15 = the 1st and 15th). A dash - is an inclusive range (1-5 = Mon–Fri). A slash / is a step: */15 = every 15 minutes (0, 15, 30, 45). Combine them, e.g. 0,30 8-17 * * 1-5 for :00 and :30 during business hours on weekdays.

This is the most famous cron gotcha. In Vixie/POSIX cron (the classic Unix implementation), when BOTH the day-of-month AND the day-of-week fields are restricted — neither is a plain asterisk — the job runs when EITHER field matches. It is a union, not an intersection. So 0 0 1 * MON runs at midnight on the 1st of every month AND on every Monday, not only when the 1st happens to fall on a Monday. If only one of the two day fields is restricted, only that one gates the schedule. This is exactly why Quartz and AWS EventBridge force you to put a ? in one of the two day fields — to remove the ambiguity. This tool honours the union rule in its next-run preview.

Every 5 minutes is */5 * * * *. Every 15 minutes is */15 * * * *. Every weekday at 9am is 0 9 * * 1-5 (minute 0, hour 9, any day-of-month, any month, Monday-to-Friday). Every day at midnight is 0 0 * * * or the alias @daily. The first day of every month at midnight is 0 0 1 * *. Every Sunday at 2:30am is 30 2 * * 0. Paste any of these into the tool to see the plain-English description and the next five run times.

Unix/crontab uses five fields and treats 0 and 7 as Sunday. Quartz (used by Java schedulers and Spring) uses six or seven fields — it adds a leading seconds field and an optional trailing year field — numbers the day-of-week 1–7 with 1 = Sunday, and supports special characters like ?, L (last), W (weekday) and # (nth weekday). AWS EventBridge uses a six-field cron() expression (minute hour day-of-month month day-of-week year), always evaluated in UTC, and also requires a ? in one day field. Because the dialects differ, an expression that is correct for one scheduler can be subtly wrong for another — always pick the matching dialect.

Unix cron accepts shorthand nicknames that expand to full expressions: @yearly (or @annually) = 0 0 1 1 *, @monthly = 0 0 1 * *, @weekly = 0 0 * * 0, @daily (or @midnight) = 0 0 * * *, and @hourly = 0 * * * *. There is also @reboot, which runs once at startup rather than on a schedule. These aliases are convenient but are a Unix/crontab feature — not every scheduler supports them, so check your platform before relying on them.

It depends on the scheduler. Classic Unix cron runs in the server's local timezone (set by the TZ environment variable or the system clock), so the same expression fires at different absolute moments on machines in different zones — and daylight-saving transitions can skip or repeat a run. AWS EventBridge always runs in UTC. Kubernetes CronJobs default to the kube-controller-manager's timezone unless you set spec.timeZone. This tool lets you preview the next run times in any timezone you choose so you can see exactly when a schedule fires, but always confirm your production scheduler's own timezone behaviour.

Sources

Method, standards & references

Method: expressions are parsed field-by-field per crontab(5) — *, ,, - and / operators, named months/weekdays, and @aliases. The next-run engine iterates minute-by-minute and, for Unix, applies the Vixie/POSIX day-of-month / day-of-week OR-union. Timezone rendering uses the browser's Intl.DateTimeFormat over the IANA database. Everything runs locally in your browser.

How we calculate this

Reviewed by Reckonist Editorial · Last reviewed 4 July 2026. Figures follow the methods and sources set out in our editorial standards.

This tool parses and previews cron schedules locally in your browser for development and debugging. Timezone behaviour differs by scheduler (Unix cron uses the server's local zone; AWS EventBridge uses UTC); always verify critical schedules against your production platform.

Keep going

Same-category tools follow this colour; a cross-category link keeps its own.