Every Wednesday Cron Expression
Runs every Wednesday at midnight.
0 0 * * 3 in POSIX cron
Expression
0 0 * * 3Try it in the tester →Field Breakdown
How It Works
Day-of-week pinned to 3 — fires only on Wednesdays at 00:00.
Example Run Times
- Wed 00:00:00
- Wed 00:00:00 (+7d)
- Wed 00:00:00 (+14d)
- Wed 00:00:00 (+21d)
- Wed 00:00:00 (+28d)
Frequently Asked Questions
Is Wednesday `3` in every cron flavor?
Vixie cron and POSIX cron: yes, Wednesday is 3 (Sunday=0). Quartz: Wednesday is 4 because Quartz uses Sunday=1.
0 0 * * 3 in Quartz / Spring
One firing per week at 00:00 on Wednesday, day 4 in Quartz's Sunday-first numbering. Midweek triggers split the working week exactly in half, which is precisely what some workloads want.
Quartz / Spring expression
0 0 0 ? * 4Try it in the tester →At 00:00:00 on Wed
Unix / POSIX equivalent: 0 0 * * 3
@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
Wednesday midnight suits checkpoint-style jobs: a midweek data-quality audit that leaves two business days to fix what it finds, mid-sprint metric snapshots, or staggering a heavy weekly task away from the Monday and Friday crowds. Register it with @Scheduled(cron = "0 0 0 ? * 4") in Spring or through a CronTrigger in standalone Quartz. When several weekly jobs exist, spreading them across different weekdays like this is cheaper than tuning thread pools to survive them all firing on the same night.
Quartz-Specific Notes
- →The equivalent name form is 0 0 0 ? * WED — functionally identical, and self-documenting in a way the bare 4 is not.
- →A weekly job has only 52 chances a year; if Wednesday's run fails, the default misfire policy will not re-run it later in the week — recovery needs your own retry or alerting.
- →Day-of-month holds the mandatory ? here. Swapping the two day fields (0 0 0 4 * ?) is also valid Quartz but means the 4th of every month — a completely different schedule that still parses cleanly.
Frequently Asked Questions
What's the difference between 0 0 0 ? * 4 and 0 0 0 4 * ??
Field position. The first constrains day-of-week (every Wednesday); the second constrains day-of-month (the 4th of each month). Both are legal, which is why a misplaced value here fails silently rather than at parse time.
Can I run Wednesday at 12:30 in the afternoon instead of midnight?
Set minute and hour: 0 30 12 ? * 4 fires at 12:30:00 every Wednesday.
0 0 * * 3 in AWS EventBridge
A weekly trigger at 00:00 UTC Wednesday, written with day-of-week 4 under EventBridge's Sunday-first scheme. Midweek is the natural slot for checkpoint work that wants maximum distance from both weekends.
AWS EventBridge expression
cron(0 0 ? * 4 *)Try it in the tester →At 00:00 UTC on Wed
Unix / POSIX equivalent: 0 0 * * 3
Field Breakdown
Using It with AWS EventBridge
Attach the rule to whatever benefits from running halfway through the working week: a reconciliation pass that compares the live database against Friday's full export to catch drift early, a model retraining job timed so a bad result can be rolled back before the weekend, or a midweek prune of stale feature branches and untagged ECR images. Because the previous weekend's full-batch outputs are several days old by Wednesday, this slot often hosts the "is anything quietly broken" sweep rather than primary processing.
AWS-Specific Notes
- →4 maps to WED; spelling it cron(0 0 ? * WED *) costs nothing and saves the next reader a trip to the documentation.
- →Exactly one run per week means 52 invocations a year — at that rarity, wiring the target's failures to a dead-letter queue matters more than at chattier cadences.
- →Systems that number the week from Monday (ISO 8601, some Quartz documentation examples) would call Wednesday 3; EventBridge agrees with Quartz's Sunday-first runtime convention, not ISO.
Frequently Asked Questions
How do I get every other Wednesday instead of every Wednesday?
EventBridge cron has no week-of-year concept, so fortnightly cannot be expressed in the schedule itself. Either let the target gate on days-since-epoch modulo 14 (ISO week parity slips in 53-week years), or use an EventBridge Scheduler rate(14 days) schedule and accept that it anchors to creation time rather than to Wednesdays.
What time does this reach a Sydney-based team?
00:00 UTC Wednesday is 10:00 or 11:00 Wednesday morning in Sydney depending on the season — one of the rare cases where a UTC midnight rule lands inside someone's business hours.
0 0 * * 3 in GitHub Actions
Day-of-week 3 pins this to Wednesdays at 00:00 UTC — the exact midpoint of the working week, once per week, 52 times a year. Midweek timing splits the gap between weekend maintenance windows, catching drift before it has a full week to accumulate.
GitHub Actions expression
0 0 * * 3Try it in the tester →At 00:00 UTC on Wed
Unix / POSIX equivalent: 0 0 * * 3
Field Breakdown
Using It with GitHub Actions
With on: schedule: - cron: "0 0 * * 3" in the default branch's workflow file, Wednesday midnight drives mid-sprint automation: a health report on open pull requests halfway through the iteration, a midweek refresh of staging data so Thursday and Friday testing runs on something recent, or a secondary security scan between weekend full sweeps. One operational quirk bites everyone eventually: merge this schedule on a Wednesday morning UTC and the first fire is a full seven days away, so include workflow_dispatch in the same on: block to prove the job works today rather than next week.
GitHub-Specific Notes
- →Wednesday 00:00 UTC occurs on Tuesday at 16:00 PST or 17:00 PDT — a US West Coast team will see this "Wednesday job" produce results during their Tuesday afternoon.
- →With only one tick per week, the gap between a bad deploy of the workflow and the discovery of the breakage can be seven days; a success notification or heartbeat makes silence detectable.
- →Moving the run later into Wednesday is just the hour field — 0 12 * * 3 keeps the weekly Wednesday identity while landing at noon UTC.
Frequently Asked Questions
I merged this on Wednesday afternoon — why didn't it run today?
Because today's 00:00 UTC tick had already passed when the file reached the default branch. The next evaluation is next Wednesday at midnight UTC; trigger a manual run via workflow_dispatch if you need output now.
Can I get this on Wednesday at noon instead of midnight?
Yes — 0 12 * * 3. Noon UTC on Wednesday has the nice property of still being Wednesday almost everywhere, from California (4 or 5 AM) to Tokyo (9 PM), unlike the midnight tick which is Tuesday across the Americas.