Weekdays at 9 AM Cron Expression
Runs Monday through Friday at 09:00.
0 9 * * 1-5 in POSIX cron
Expression
0 9 * * 1-5Try it in the tester →Field Breakdown
How It Works
Hour pinned to 9, day-of-week restricted to 1–5 (Mon–Fri). Weekends are skipped.
Example Run Times
- Mon 09:00:00
- Tue 09:00:00
- Wed 09:00:00
- Thu 09:00:00
- Fri 09:00:00
Frequently Asked Questions
Will this fire on bank holidays?
Yes — cron has no holiday calendar. Gate the script with a `date` check or integrate with a holiday API if you need to skip them.
0 9 * * 1-5 in Quartz / Spring
Five firings a week: 09:00 sharp Monday through Friday. It combines a pinned hour with Quartz's Sunday-first day-of-week numbering, where 2-6 spans the working week.
Quartz / Spring expression
0 0 9 ? * 2-6Try it in the tester →At 09:00:00 on Mon, Tue, Wed, Thu, Fri
Unix / POSIX equivalent: 0 9 * * 1-5
@Scheduled parser uses 0–7 with Monday = 1 — numeric day values mean different days in the two. The day names (MON, FRI, MON-FRI) are identical in both and safer to copy between them.Field Breakdown
Using It with Quartz / Spring
This is the archetypal start-of-business trigger for B2B systems — opening support-queue assignments, releasing the day's task batches, or posting a metrics summary where weekend noise would just be clutter. In Spring it reads @Scheduled(cron = "0 0 9 ? * 2-6", zone = "America/New_York") when the team is regional; in Quartz, build it with cronSchedule("0 0 9 ? * 2-6") and verify intent with CronExpression.getNextValidTimeAfter() in a unit test before shipping — day-of-week conversions are where ported crontabs most often go wrong.
Quartz-Specific Notes
- →A naive port of the Unix 0 9 * * 1-5 keeping 1-5 would fire Sunday-Thursday in Quartz — an off-by-one that often survives until someone notices the Friday report never arrived.
- →Since day-of-week carries the restriction, day-of-month holds the mandatory ?; swapping which field gets the ? changes the meaning entirely.
- →Friday's 09:00 run and Monday's are 72 hours apart — if the job processes "since last run" deltas, make sure its lookback window tolerates the weekend gap.
Frequently Asked Questions
I migrated 0 9 * * 1-5 from crontab and it ran on Sunday — why?
Quartz's 1-5 means Sunday through Thursday because SUN=1 there. The correct Quartz day range for Mon-Fri is 2-6 (or just write MON-FRI).
How can I preview the next few fire times before deploying?
Instantiate org.quartz.CronExpression with the string and loop getNextValidTimeAfter() from now — or call CronExpression.parse(...).next(...) from Spring 5.3's own CronExpression. Both make great unit-test assertions.
Can I add a lunchtime run on the same trigger?
Yes, list the hours: 0 0 9,13 ? * 2-6 fires at 09:00 and 13:00 each weekday. One trigger, ten firings a week.
0 9 * * 1-5 in AWS EventBridge
Five runs a week: 09:00 on days 2 through 6, which in EventBridge's Sunday-first numbering means Monday to Friday. This is the classic business-hours kickoff schedule, and on a classic rule that 9 AM is pinned to UTC.
AWS EventBridge expression
cron(0 9 ? * 2-6 *)Try it in the tester →At 09:00 UTC on Mon, Tue, Wed, Thu, Fri
Unix / POSIX equivalent: 0 9 * * 1-5
Field Breakdown
Using It with AWS EventBridge
Attach the expression to a rule or an EventBridge Scheduler schedule and target the morning machinery: a Lambda that compiles overnight alerts into one Slack summary, a Step Functions run that refreshes dashboards before the team logs on, or an SQS message that releases the day's queued work. It also pairs naturally with instance scheduling — many shops use this exact string to start dev-environment EC2 and RDS instances each workday morning and a mirrored evening rule to stop them, trimming roughly 70 percent off always-on compute cost.
AWS-Specific Notes
- →On a rule the 09:00 is UTC, so US-based teams actually get a small-hours run; the Scheduler's ScheduleExpressionTimezone is the fix when 9 AM must mean office time.
- →Day-of-week 2-6 equals MON-FRI here (SUN=1); writing the POSIX habit 1-5 would silently shift the window to Sunday-Thursday.
- →With day-of-week constrained, day-of-month must hold the ? — that is why this expression and the daily-9am one differ in two fields, not one.
Frequently Asked Questions
I copied 0 9 * * 1-5 from my crontab and EventBridge runs it Sunday through Thursday — why?
EventBridge's day-of-week is 1-7 starting at Sunday, so 1-5 is SUN-THU. Use 2-6 or the unambiguous MON-FRI, and remember to wrap it as cron(0 9 ? * MON-FRI *).
How do I add a matching weekday shutdown at 6 PM?
Create a second rule with cron(0 18 ? * 2-6 *) targeting your stop Lambda. A single rule could fire at both times with cron(0 9,18 ? * 2-6 *), but both invocations would carry identical input, so the target couldn't tell start from stop — two rules with different input constants keep that unambiguous.
0 9 * * 1-5 in GitHub Actions
Five mornings a week: hour 9, minute 0, day-of-week 1 through 5. In GitHub Actions terms that is 09:00 UTC Monday-Friday — the schedule behind countless standup bots, with the usual caveat that 9am UTC is only 9am locally for a narrow band of the planet.
GitHub Actions expression
0 9 * * 1-5Try it in the tester →At 09:00 UTC on Mon, Tue, Wed, Thu, Fri
Unix / POSIX equivalent: 0 9 * * 1-5
Field Breakdown
Using It with GitHub Actions
Written as on: schedule: - cron: "0 9 * * 1-5" in a default-branch workflow, this cadence drives workday-opener automation: a job that comments review-queue summaries on a tracking issue, assigns a rotating on-call label, or warms caches before the team's CI rush. It pairs naturally with a Slack or Teams webhook step in the job body. Anyone targeting a non-UTC office should translate the hour first — a London team gets 9am only in winter, 10am after the clocks change.
GitHub-Specific Notes
- →Combines two day fields' worth of intent in one: 1-5 restricts to Monday-Friday (Sunday=0 numbering), and the 09:00 UTC hour determines which local workday morning — if any — it corresponds to.
- →Expect minute-0 queue delay on each of the 5 weekly ticks; a standup summary that must beat a 9:15 meeting should be scheduled several minutes earlier than the deadline implies.
- →If the repository is public and dormant for 60 days, the Monday-to-Friday rhythm stops without error output — the only signals are the notification email and the disabled state in the Actions tab.
Frequently Asked Questions
Will this fire at 9am for both my Berlin and New York teammates?
No — it fires once, at 09:00 UTC, which is 10:00 or 11:00 in Berlin and 04:00 or 05:00 in New York depending on the season. For per-region timing you need separate cron lines, one per target UTC hour.
Can one workflow have this schedule plus a weekend variant?
Yes. The schedule key accepts a list — add a second item such as - cron: "0 12 * * 0,6" and use github.event.schedule inside the job to branch behavior by which cron line fired.