AWS EventBridge Cron Builder

Build and validate AWS cron() and rate() schedule expressions for EventBridge rules, EventBridge Scheduler and Lambda. Get a plain-English explanation, the next run times in UTC and your local time, a Unix cron converter and ready-to-paste CLI, CloudFormation, Terraform and Serverless snippets.

Evaluated in UTC
0-59
0-23
1-31 · ? L W
1-12 · JAN-DEC
1-7 (1=SUN) · ? L #
1970-2199

Presets

Next runs

    Use it

    
        

    Unix cron → AWS

      AWS → Unix cron

      from the expression above

        The six fields of an AWS cron expression

        Amazon EventBridge (formerly CloudWatch Events), EventBridge Scheduler, and services built on them such as scheduled Lambda functions, ECS scheduled tasks and Glue triggers all use the same cron() syntax. It has six space-separated fields, and all six are required:

        cron(Minutes Hours Day-of-month Month Day-of-week Year)
             |       |     |            |     |           |
             |       |     |            |     |           `-- 1970-2199
             |       |     |            |     `-- 1-7 or SUN-SAT (1 = Sunday)
             |       |     |            `-- 1-12 or JAN-DEC
             |       |     `-- 1-31
             |       `-- 0-23
             `-- 0-59

        The ? rule

        You can't restrict Day-of-month and Day-of-week in the same expression. Exactly one of them must be ?. If you want "every day", put * in one field and ? in the other: cron(0 12 * * ? *) or cron(0 12 ? * * *). AWS rejects cron(0 12 * * * *) with a validation error, and it also rejects an expression with ? in both fields.

        This is stricter than Unix cron, where both fields can be set and the job runs when either one matches. To get that behaviour on AWS, create two rules: one that uses Day-of-month and one that uses Day-of-week. The converter above does this for you.

        Differences from Unix cron (the usual confusions)

        Time zones and EventBridge Scheduler

        Classic EventBridge rules (aws events put-rule, AWS::Events::Rule, aws_cloudwatch_event_rule) always evaluate cron expressions in UTC. If you need a job at 09:00 local time all year round, those rules can't follow daylight saving changes for you.

        EventBridge Scheduler (aws scheduler create-schedule, AWS::Scheduler::Schedule, aws_scheduler_schedule) uses the same expression syntax but accepts a ScheduleExpressionTimezone such as Europe/London or America/New_York, and it handles DST transitions. It also supports one-time at(2026-12-31T23:00:00) schedules and flexible time windows. For new workloads AWS recommends Scheduler over scheduled rules. The run times on this page assume UTC; if you set a time zone on a Scheduler schedule, read the times as that zone's wall-clock time.

        rate() vs cron()

        rate(value unit) runs at a fixed interval: rate(5 minutes), rate(1 hour), rate(7 days). The unit is minute, minutes, hour, hours, day or days. Use the singular when the value is 1 and the plural otherwise, so rate(1 minutes) and rate(5 minute) are both errors.

        A rate starts counting from when the rule or schedule is created, not from the top of the hour. rate(1 hour) created at 10:17 fires at 11:17, 12:17 and so on. If you need fixed wall-clock times, such as "on the hour" or "at midnight", use cron(). The next runs shown for a rate expression are counted from now.

        Examples

        ExpressionRuns
        cron(0/5 * * * ? *)Every 5 minutes
        cron(0 * * * ? *)Every hour, on the hour
        cron(0 0 * * ? *)Every day at midnight UTC
        cron(0 9 ? * MON-FRI *)Weekdays at 09:00 UTC
        cron(0/15 9-17 ? * MON-FRI *)Every 15 minutes during office hours, Monday to Friday
        cron(0 8 1 * ? *)08:00 on the 1st of every month
        cron(0 18 L * ? *)18:00 on the last day of every month
        cron(0 9 LW * ? *)09:00 on the last weekday of every month
        cron(0 10 ? * 2#1 *)10:00 on the first Monday of every month
        cron(0 17 ? * 6L *)17:00 on the last Friday of every month
        cron(0 0 1 1/3 ? *)Midnight on the first day of each quarter
        cron(30 23 31 12 ? 2026)Once, at 23:30 UTC on 31 December 2026
        rate(10 minutes)Every 10 minutes from creation time

        Common validation errors