AWS uses 6 fields with year. Day-of-month OR day-of-week must be ? (not both *). All schedules run in UTC.
| Expression | What it means | Typical use |
|---|---|---|
0 0 ? * * * |
Every day at midnight UTC | Daily cleanup, backups, daily reports. |
0/15 * ? * * * |
Every 15 minutes | Frequent polling, queue draining. |
0 9 ? * MON-FRI * |
Every weekday at 9 AM UTC | Business-hours-only batch jobs. |
0 0 ? * SUN * |
Every Sunday at midnight | Weekly maintenance windows. |
0 0 1 * ? * |
First day of every month | Monthly billing, monthly reports. |
0 0 1 1 ? * |
January 1st each year | Yearly resets, archive rotations. |
Click any expression to load it into the tool above.
AWS uses Quartz-style cron where you can't restrict both day-of-month AND day-of-week at the same time. The ? means "no specific value" — it tells AWS to use the OTHER day field. So 0 9 ? * MON-FRI * means "use MON-FRI for the schedule, ignore day-of-month".
Every 1 minute. EventBridge does not support sub-minute granularity. For faster triggers, use Step Functions Express or Lambda with self-invocation.
EventBridge cron is UTC only. To run "9 AM Tokyo time", calculate the equivalent UTC hour (e.g., 0 0 ? * * * for midnight Tokyo = 3 PM UTC the previous day). Alternatively, use AWS EventBridge Scheduler (a newer service) which supports timezones.
Three differences: (1) 6 fields with year instead of 5, (2) requires ? in one day field, (3) UTC only with no environment context. Otherwise the syntax (ranges, lists, steps) is the same.
Yes — use the AWS Console "Test schedule" feature, or use the AWS CLI: aws events test-event-pattern. You can also inspect the upcoming runs in our tool above.