Development

Cron Expressions Explained: 15 Real Schedules and the Time Zone Traps

Cron syntax fits on one line and still trips up everyone eventually — usually at 2 a.m. on the night daylight saving time changes. Here is how the five fields work, a set of schedules you can copy, and the traps worth knowing.

Beginner · 7 min read · Updated October 30, 2026

The five fields

┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12)
│ │ │ │ ┌ day of week (0–6, Sunday = 0)
* * * * *

Each field takes a value (5), a list (1,15), a range (1-5), a step (*/10) or * for every value. Some systems (Quartz, AWS EventBridge) add a seconds or year field — check which flavor you are writing for.

Schedules to copy

ExpressionRuns
*/5 * * * *Every 5 minutes
0 * * * *Every hour, on the hour
15 */2 * * *At :15 every 2 hours
0 9 * * *Every day at 09:00
30 2 * * *Every day at 02:30 (see the DST trap below)
0 9 * * 1-5Weekdays at 09:00
0 18 * * 5Fridays at 18:00
0 0 * * 0Sundays at midnight
0 0 1 * *First day of every month
0 0 1 1 *Once a year, January 1
0 8 1,15 * *The 1st and 15th at 08:00
*/15 9-17 * * 1-5Every 15 minutes during office hours
0 0 * * 6,0Midnight on weekends
0 3 * 1,4,7,10 *Daily at 03:00 in the first month of each quarter
0 12 * * *Daily at noon

Build or translate any expression into plain English with the Cron Expression Generator, which also lists the next run times.

The day-of-month vs day-of-week trap

When both the day-of-month and day-of-week fields are restricted, standard cron runs when either matches — not both. 0 9 13 * 5 runs on the 13th of every month and every Friday, not only on Friday the 13th. To run on the last weekday or the first Monday, schedule daily and check the date in your script, or use a scheduler with extensions like L and #.

Time zones and daylight saving time

  • Servers and CI run in UTC. GitHub Actions schedules, most containers and cloud schedulers use UTC. 09:00 in New York is 0 14 * * * in winter and 0 13 * * * in summer. Convert with the Time Zone Converter, or see several zones at once on the World Clock.
  • Jobs between 01:00 and 03:00 local time are risky. When clocks spring forward, 02:30 doesn’t exist and the job may be skipped; when they fall back, it can run twice. Schedule critical jobs outside that window, or run the scheduler in UTC.
  • GitHub Actions schedules can start several minutes late at busy times and are disabled on repositories without activity for 60 days. Generate a workflow with the GitHub Actions Generator.

Frequently asked questions

What does */5 mean in cron?
Every fifth value of that field. In the minute field, */5 means minutes 0, 5, 10 … 55 — every five minutes.
Is Sunday 0 or 7?
Both work in most cron implementations: 0 and 7 mean Sunday. Use 0 for portability.
What time zone does cron use?
The time zone of the machine or scheduler. Linux cron uses the system time zone (CRON_TZ can override it in some versions); GitHub Actions and most cloud schedulers use UTC.

Keep reading