Free tool · No signup · Private

Cron Expression Explainer and Next Run Times

Paste any 5-field cron expression from a crontab, GitHub Actions workflow or Kubernetes CronJob to read it in plain English. You'll see the next run times in UTC and in your own time zone, plus a clear message when something's wrong.

By Suman Sharma · Updated

Cron expression · explainerLocal
0
Minute
9
Hour
*
Day (month)
*
Month
1-5
Day (week)
Runs
At 09:00 on Monday through Friday.

Next runs

  1. Upcoming run times appear here.

Most servers, GitHub Actions and cloud schedulers run cron in UTC.

How to use this tool

  1. Paste the expression

    Type or paste the five fields, like 0 9 * * 1-5, or a shortcut such as @daily. Presets cover the most common schedules.

  2. Read the plain-English version

    The schedule is described in words, and each field is labelled underneath so you can see which part does what.

  3. Check the next runs

    Switch between UTC and your time zone to see exactly when the job will fire next.

Example

A weekday job, checked on Wednesday 14 October 2026 at 10:00 UTC.

Input

0 9 * * 1-5

Result

  • At 09:00 on Monday through Friday.
  • Next runs (UTC): Thu 15 Oct 09:00, Fri 16 Oct 09:00, Mon 19 Oct 09:00
  • The weekend is skipped, and today's 09:00 has already passed

Add the day of the month too, as in 0 9 15 * 1-5, and the job runs on the 15th and on every weekday, not just weekdays that fall on the 15th. See common errors below.

The five fields

A standard cron expression has five fields separated by spaces, read left to right:

  • Minute: 0–59.
  • Hour: 0–23, in 24-hour time.
  • Day of month: 1–31.
  • Month: 1–12, or JAN–DEC.
  • Day of week: 0–6 with 0 as Sunday (7 is also Sunday), or SUN–SAT.

Special characters

  • * (any): every value in the field.
  • , (list): 1,15 means the 1st and the 15th.
  • - (range): 1-5 means Monday through Friday in the day-of-week field.
  • / (step): */15 in the minute field means every 15 minutes; 9-17/2 means every 2 hours from 9 to 17.
  • Shortcuts: @hourly, @daily (same as @midnight), @weekly, @monthly and @yearly.

Time zones: the most common surprise

Cron runs in the time zone of whatever executes it. GitHub Actions scheduled workflows always use UTC, as do most cloud schedulers and containers by default. A job written as 0 9 * * * meaning 9 AM in New York actually runs at 9 AM UTC, which is 4 or 5 AM in New York depending on daylight saving time.

That's why this tool shows the next runs in UTC by default, with a switch to your local time.

Common cron schedules

  • */5 * * * *: every 5 minutes.
  • 0 * * * *: every hour, on the hour.
  • 0 */6 * * *: every 6 hours (00:00, 06:00, 12:00, 18:00).
  • 0 0 * * *: every day at midnight.
  • 30 2 * * *: every day at 2:30 AM.
  • 0 9 * * 1-5: 9 AM, Monday to Friday.
  • 0 0 * * 0: every Sunday at midnight.
  • 0 0 1 * *: the first day of every month at midnight.
  • 0 0 1 1 *: once a year, on 1 January.

When both day fields are set

If you fill in both the day-of-month and the day-of-week field, standard cron runs the job when either one matches, not when both do. 0 0 13 * 5 runs on every 13th of the month and on every Friday, not only on Friday the 13th.

To run only when both match, keep one of the fields as * and check the other condition inside the script.

Common errors

  • Expecting day-of-month AND day-of-week

    When both day fields are set, cron runs if either matches. 0 0 15 * 1 runs on the 15th and every Monday. To run only on Mondays that fall on the 15th, schedule it for Mondays and check the date inside the script.

  • "That has 6 fields"

    Quartz, Spring and some cloud schedulers add a seconds field at the start (and sometimes a year at the end). Linux crontab, GitHub Actions and Kubernetes use 5. Drop the seconds to use it in a standard crontab.

  • */7 doesn't run every 7 minutes

    Steps restart each hour: */7 runs at :00, :07 … :56, then :00 again, a 4-minute gap. Use a step that divides 60 evenly (5, 10, 15, 20, 30) for a steady interval.

  • The job ran at the wrong hour

    The server is almost certainly on UTC. Convert your local time to UTC, and remember that the offset changes with daylight saving time unless your scheduler supports a time zone setting.

Frequently asked questions

What does * * * * * mean in cron?

Every minute of every hour of every day. Each * means 'any value' for its field: minute, hour, day of month, month and day of week.

How do I run a cron job every 5 minutes?

Use */5 * * * *. It runs at :00, :05, :10 and so on through :55, every hour.

What time zone does GitHub Actions cron use?

UTC, always. A schedule of 0 9 * * * runs at 09:00 UTC. Switch this tool to your time zone to see what that is locally.

Is 0 or 7 Sunday in cron?

Both. Standard cron accepts 0 and 7 for Sunday, and you can also write SUN.

Why is my cron expression rejected with 6 fields?

Standard cron has 5 fields. A sixth usually means a seconds field from Quartz or Spring. Remove it to use the schedule in crontab, GitHub Actions or Kubernetes.

How do I run a cron job every day at a specific time?

Write the minute, then the hour, then three asterisks. 0 7 * * * runs at 7:00 every morning and 30 18 * * * at 6:30 PM, in the scheduler's time zone.

How do I schedule a cron job on weekdays only?

Put 1-5 in the day-of-week field. 0 9 * * 1-5 runs at 9:00 Monday to Friday.

Contact

Get in Touch

Want to call me? book a call and I'll respond in the available time slot. I will ignore all soliciting.