Hourly
0 9-17 * * 1-5
Top of each hour, 09:00-17:00, Monday to Friday.
This preview is live: the table below shows the actual next run times for 0 9-17 * * 1-5 in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.
What 0 9-17 * * 1-5 means
0 9-17 * * 1-5 combines an hour range with a weekday range: fire on the hour from 9am through 5pm, but only Monday through Friday. That is nine runs a day, five days a week, the classic "only while the office is open" schedule.
Ranges keep this readable: 9-17 in the hour field and 1-5 in the day-of-week field. It is the go-to pattern for jobs that should not bother running overnight or at weekends, internal reports, queue processors for human-facing work, or anything whose output nobody reads outside business hours.
Field-by-field breakdown
Unix cron has five fields. Here is what each one is doing in this expression:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | minute = 0 |
| Hour | 9-17 | the range 9-17 (inclusive) of hour |
| Day of month | * | every day-of-month |
| Month | * | every month |
| Day of week | 1-5 | the range 1-5 (inclusive) of day-of-week |
Hourly during business hours in every scheduler
The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target, the field count and day-of-week numbering differ between them.
| Scheduler | Expression | Copy |
|---|---|---|
| Unix / crontab | 0 9-17 * * 1-5 | |
| GitHub Actions | 0 9-17 * * 1-5 | |
| Kubernetes CronJob | 0 9-17 * * 1-5 | |
| Vercel Cron | 0 9-17 * * 1-5 | |
| Quartz | 0 0 9-17 ? * 1-5 * | |
| Spring | 0 0 9-17 ? * 1-5 | |
| AWS EventBridge | 0 9-17 ? * 1-5 * |
Dialect note: Kubernetes defaults to UTC, so "business hours" will drift against your local clock across DST unless you prefix the schedule with CRON_TZ=Europe/London (1.25+).
When you would use 0 9-17 * * 1-5
- Processing support tickets or human-review queues during staffed hours.
- Sending internal reports only on working days.
- Polling a partner system that is itself only online 9-5.
The gotcha worth knowing
9-17 includes both 09:00 and 17:00 (nine runs). If you meant "up to but not including 5pm", use 9-16. Cron ranges are inclusive on both ends.
People also search for
0 9-17 * * 1-5 FAQ
What does the cron expression 0 9-17 * * 1-5 mean?
0 9-17 * * 1-5 means: Top of each hour, 09:00-17:00, Monday to Friday. 0 9-17 * * 1-5 combines an hour range with a weekday range: fire on the hour from 9am through 5pm, but only Monday through Friday. That is nine runs a day, five days a week, the classic "only while the office is open" schedule.
How do I write "hourly during business hours" in GitHub Actions?
Use 0 9-17 * * 1-5 in the schedule's cron field. 9-17 includes both 09:00 and 17:00 (nine runs). If you meant "up to but not including 5pm", use 9-16. Cron ranges are inclusive on both ends.
How do I write "hourly during business hours" for AWS EventBridge?
EventBridge uses six fields with a required year and a ? placeholder in one day field: 0 9-17 ? * 1-5 *. Wrap it as cron(0 9-17 ? * 1-5 *) in the console or CloudFormation.
What is the Quartz equivalent of 0 9-17 * * 1-5?
Quartz is seconds-first with a trailing year, so the equivalent is 0 0 9-17 ? * 1-5 *. Remember Quartz numbers Sunday as 1, the opposite of Unix.
Related cron patterns
More cron tools
Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.