AWS EventBridge Cron Expression Translator
Table of Contents
AWS EventBridge uses a 6-field cron format that differs from standard Unix cron in three important ways: it requires ? in either day-of-month or day-of-week, uses 1-based day-of-week numbering (1=Sunday), and wraps the expression in a cron() function call. Use our free crontab visualizer after converting the expression to standard 5-field format.
All AWS EventBridge schedules run in UTC. This guide covers the full conversion process and common AWS schedule patterns.
AWS EventBridge Cron Format
AWS EventBridge schedule expressions take one of two forms:
cron(minutes hours day-of-month month day-of-week year)
rate(value unit)
# Examples:
cron(0 9 ? * MON-FRI *) # 9 AM UTC weekdays
cron(0 12 * * ? *) # Noon UTC daily
rate(5 minutes) # Every 5 minutes
The 6 fields inside cron():
| Position | Field | Values |
|---|---|---|
| 1 | Minutes | 0-59 |
| 2 | Hours | 0-23 (UTC) |
| 3 | Day of month | 1-31, L, W, ? (required if day-of-week is set) |
| 4 | Month | 1-12 or JAN-DEC |
| 5 | Day of week | 1-7 (1=SUN) or SUN-SAT, L, #, ? (required if day-of-month is set) |
| 6 | Year | 1970-2199, * (usually *) |
The ? Requirement — Why AWS Cron Is Different
In standard Unix cron, you can set both day-of-month and day-of-week to specific values and get OR logic. AWS EventBridge does not allow this — you must set one of them to ?.
Rule: if day-of-month is * or a specific date, day-of-week must be ?. And vice versa.
cron(0 9 * * ? *) # ✓ Every day at 9 AM — day-of-week is ?
cron(0 9 ? * 2 *) # ✓ Every Monday at 9 AM — day-of-month is ?
cron(0 9 * * * *) # ✗ INVALID — both fields set, no ?
cron(0 9 ? * ? *) # ✗ INVALID — both fields are ?
Day-of-week numbering in AWS: 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday. Three-letter names (SUN, MON, ..., SAT) work identically.
Sell Custom Apparel — We Handle Printing & Free ShippingConverting AWS EventBridge Expressions to Standard Cron
To use the crontab visualizer with an AWS expression:
- Remove the
cron()wrapper and the year field (last value). - Replace
?with*. - Convert day-of-week numbers: AWS 2-7 (Mon-Sat) → Standard 1-6. AWS 1 (Sun) → Standard 0.
- Or convert day-of-week names: MON→1, TUE→2, WED→3, THU→4, FRI→5, SAT→6, SUN→0.
Example: cron(0 9 ? * MON-FRI *)
- Remove wrapper and year:
0 9 ? * MON-FRI - Replace ?:
0 9 * * MON-FRI - Convert names (no change needed — MON-FRI is accepted):
0 9 * * 1-5
Paste 0 9 * * 1-5 into the visualizer → "At 9:00 AM, Monday through Friday." (all times are UTC for AWS schedules)
Common AWS EventBridge Schedule Patterns
| Goal | AWS EventBridge Expression |
|---|---|
| Every day at noon UTC | cron(0 12 * * ? *) |
| Every weekday 9 AM UTC | cron(0 9 ? * MON-FRI *) |
| Every Monday at midnight UTC | cron(0 0 ? * 2 *) |
| First of month midnight UTC | cron(0 0 1 * ? *) |
| Last day of month | cron(0 0 L * ? *) |
| Every 15 minutes | rate(15 minutes) |
| Every hour | rate(1 hour) |
| Once a day | rate(1 day) |
cron() vs rate(): Use rate() for simple fixed intervals — it's cleaner and less error-prone. Use cron() when you need specific times of day, specific days of the week, or specific dates. For anything more complex than "every N minutes/hours/days," cron() is the right choice.
Try It Free — No Signup Required
Runs 100% in your browser. No account, no install, no limits.
Open Free Crontab VisualizerFrequently Asked Questions
Why does AWS EventBridge require a ? in cron expressions?
AWS EventBridge does not support the OR-logic behavior that standard Unix cron uses when both day-of-month and day-of-week are set. To prevent ambiguity, AWS requires exactly one of these fields to be set to ? (no specific value). If you want a weekday-based schedule, set day-of-month to ?. If you want a date-based schedule, set day-of-week to ?.
What timezone does AWS EventBridge use for cron schedules?
EventBridge Scheduler (the newer service) supports timezone specification. Classic EventBridge rules use UTC only. Always verify which service you're using. For EventBridge Scheduler, you can set timezone in the schedule configuration. For classic EventBridge rules with cron(), all times are UTC.
How do I schedule an AWS Lambda on the last business day of the month?
Use "cron(0 17 LW * ? *)" — this fires at 5 PM UTC on the last weekday (L=last, W=nearest weekday) of each month. EventBridge supports the L and W special characters from Quartz scheduler syntax. Note: LW gives you the last day that is a weekday, not "last Friday" — for the last Friday specifically, use "0 17 ? * 6L *".

