Developer
Encoders, converters & dev utilities
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
In plain English
At 09:00, on Monday through Friday.
0 9 * * 1-5 /path/to/job.sh
spec: schedule: "0 9 * * 1-5"
@Scheduled(cron = "0 0 9 * * 1-5")
cron(0 9 * * 1-5 *)
on:
schedule:
- cron: "0 9 * * 1-5"| # | Field | Allowed values |
|---|---|---|
| 1 | Minute | 0–59 |
| 2 | Hour | 0–23 |
| 3 | Day of month | 1–31 |
| 4 | Month | 1–12 or JAN–DEC |
| 5 | Day of week | 0–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
Cron uses no year — pair it with timestamps
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".
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 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 ?
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
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.
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.