Every weekday at 09:00
- Input
- 0 9 * * 1-5
- Result
- Mon–Fri at 09:00
Day-of-week uses 0–6 with Sunday as 0. Both 0 and 7 mean Sunday.
Paste a cron expression and see when it actually fires. Every field is broken down, and run times are shown in whichever timezone your scheduler is using — which is where most cron surprises come from.
Common schedules
| Field | Value | Matches |
|---|---|---|
| Minute | 0 | 0 |
| Hour | 9 | 9 |
| Day of month | * | every value |
| Month | * | every value |
| Day of week | 1-5 | Mon, Tue, Wed, Thu, Fri |
Runs entirely in your browser. This page is a static file. Whatever you type stays in the tab, is never sent to a server, and is gone when you close it — so pasting a real token or config is safe.
30 2 * * 0 means.Day-of-week uses 0–6 with Sunday as 0. Both 0 and 7 mean Sunday.
The step applies within the range, so this stops after 18:45 rather than running all night.
When both day fields are restricted, cron ORs them together instead of requiring both.
A Kubernetes CronJob without a timeZone field uses the controller's zone, which is normally UTC. A 09:00 schedule then runs at 18:00 KST.
A step divides the whole range from 0, so */5 in the hour field means 0, 5, 10, 15, 20 — not every fifth hour from now.
Restricting both makes the schedule fire more often, not less. Leave one as * unless you genuinely want the union.
Standard Unix cron and Kubernetes CronJob use 5: minute, hour, day-of-month, month, day-of-week. AWS EventBridge adds a sixth year field and requires a ? in one of the two day fields. Quartz puts seconds first, making 6 or 7.
Unless you set spec.timeZone, the schedule is interpreted in the kube-controller-manager's timezone — usually UTC. Set it explicitly, or write the schedule in UTC and document it.
It is shorthand for 0 0 * * *, midnight every day. The other shortcuts are @hourly, @weekly, @monthly and @yearly. @reboot is different: it runs at startup and has no schedule.