cronuru
Pattern

Weekdays at 9 AM

0 9 * * 1-5
0 0 9 ? * MON-FRI
0 9 * * 1-5
0 9 ? * MON-FRI *
0 0 9 * * MON-FRI
0 9 * * 1-5

Runs at 09:00 Monday through Friday — 5 invocations per week, skipping Saturday and Sunday.

Use in your stack

# Weekdays at 9 AM, server timezone
0 9 * * 1-5 /usr/local/bin/morning-standup.sh

# Pin to US Pacific time
CRON_TZ=America/Los_Angeles
0 9 * * MON-FRI /usr/local/bin/morning-standup.sh
{ "cron": "0 0 9 ? * MON-FRI", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
  name: morning-standup
spec:
  schedule: "0 9 * * 1-5"
  timeZone: "America/Los_Angeles"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: standup
            image: my-image:latest
          restartPolicy: OnFailure
cron(0 9 ? * MON-FRI *)
@Scheduled(cron = "0 0 9 * * MON-FRI", zone = "America/Los_Angeles")
public void weekdayMorning() { /* ... */ }
on:
  schedule:
    - cron: '0 9 * * 1-5'   # 09:00 UTC, Mon-Fri

Next runs

Pick a timezone to see when this expression fires next.

Next 10 runs
  1. 012026-07-06T09:00:00.000Z
  2. 022026-07-07T09:00:00.000Z
  3. 032026-07-08T09:00:00.000Z
  4. 042026-07-09T09:00:00.000Z
  5. 052026-07-10T09:00:00.000Z
  6. 062026-07-13T09:00:00.000Z
  7. 072026-07-14T09:00:00.000Z
  8. 082026-07-15T09:00:00.000Z
  9. 092026-07-16T09:00:00.000Z
  10. 102026-07-17T09:00:00.000Z

Variations

0 9 * * *

Daily at 9 AM (including weekends)

0 17 * * 1-5

Weekdays at 5 PM

0 9-17 * * 1-5

Hourly during business hours (9 AM to 5 PM weekdays)

0 9 * * 6,0

Weekends at 9 AM

Common use cases

  • Daily team standup digest emails.
  • Morning ticket-queue summaries for support teams.
  • Workday-only operational dashboards or KPI rollups.
  • Triggering an internal ETL that prepares dashboards for the working day.

Gotchas

  • Day-of-week numbering: Unix uses `1-5` (Mon-Fri, with Sun=0). Quartz uses `MON-FRI` or `2-6` (Sun=1). When in doubt, use name form (`MON-FRI`) — it works in every dialect.
  • Timezone matters more than usual — "9 AM weekdays" is meaningful only in the user's local timezone. Pin the timezone explicitly.
  • On US holidays, this schedule still fires — cron has no concept of holidays. Either gate inside your script with a calendar check or accept that the daily message goes out on July 4th too.
  • AWS EventBridge: `0 9 ? * MON-FRI *` (use `?` for day-of-month and prefer name form).

0 9 * * 1-5 is the most-written business-hours cron expression. It encodes “make this happen at the start of every workday” — assuming a Monday-through-Friday workweek, no holidays, and a known timezone. The first two assumptions are usually safe; the third often isn’t.

Frequently asked questions

What does `0 9 * * 1-5` mean?
Minute `0`, hour `9`, day-of-month `*` (any), month `*` (any), day-of-week `1-5` (Monday through Friday in Unix dialects where Sun=0). So the job fires at 09:00 on every weekday.
What's the difference between `1-5` and `MON-FRI` in the day-of-week field?
Functionally identical. `1-5` uses numeric day codes (Sun=0, Mon=1, …, Sat=6 in Unix cron). `MON-FRI` uses three-letter name codes. Names are case-insensitive and avoid the off-by-one confusion between dialects — Quartz uses `1-7` with Sun=1, so its weekday range is `2-6`. Names work the same everywhere.
How does Quartz express "weekdays at 9 AM"?
`0 0 9 ? * MON-FRI` — six fields (seconds at front, day-of-week as name range), with `?` in day-of-month because day-of-week is set. The numeric form is `0 0 9 ? * 2-6` since Quartz uses Sun=1.
Will this fire on holidays?
Yes. Standard cron has no holiday calendar — it only knows weekdays vs weekends by day-of-week. If you want to skip holidays, gate inside your job script with a date check (e.g., `date +%Y-%m-%d | grep -q -f holidays.txt && exit 0`), or use a more capable scheduler like AWS Step Functions or Apache Airflow that supports holiday-aware schedules.
How do I run at 9 AM EVERY day including weekends?
Use `0 9 * * *` (no day-of-week restriction). The asterisk in the last field means "any day of the week." See the [daily at 9 AM pattern](/daily-at-9am) for the full reference.

Browse all cron patterns

Every schedule Cronuru documents, with its expression and code snippets for six dialects.