VSThiran

Cron expression examples and how to read them

Quick answer

A standard cron expression has five fields separated by spaces: minute, hour, day-of-month, month, day-of-week. For example, "30 9 * * 1-5" means 09:30 on weekdays.

  1. 1Count the five fields: minute, hour, day-of-month, month, day-of-week.
  2. 2Match each field to its allowed range.
  3. 3Decode any *, comma, dash or slash characters.
  4. 4Verify the result in a translator before deploying.

Free, no sign-up, and your file is read on your own device rather than uploaded.

A cron expression packs a schedule into five space-separated fields - minute (0 to 59), hour (0 to 23), day of month (1 to 31), month (1 to 12), and day of week (0 to 7, where both 0 and 7 mean Sunday) - read left to right in that fixed order.

Four special characters cover almost every real schedule: * for "every value", a comma for a list, a dash for a range, and a slash for a step (every N units). Combining them, like "30 9 * * 1-5" for 09:30 on weekdays, covers most everyday scheduling needs. Check whether your platform uses the standard 5 fields or adds seconds/year (Quartz and some cloud schedulers use 6 or 7), and confirm the time zone the scheduler runs in - many default to UTC.

Common cron expressions

ExpressionPlain English
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour, on the hour
0 0 * * *Every day at midnight
30 9 * * 1-509:30 on weekdays
0 0 1 * *First day of every month at midnight
0 0 * * 0Every Sunday at midnight
0 8 1 1 *08:00 on 1 January
0 22 * * 5Fridays at 22:00

Step by step

  1. Identify the five fields

    Split the expression on spaces: minute, hour, day-of-month, month, day-of-week, in that order.

  2. Check each field against its allowed range

    Minute 0-59, hour 0-23, day of month 1-31, month 1-12, day of week 0-7.

  3. Decode any special characters

    * means every value, a comma lists several, a dash is a range, and a slash is a step.

  4. Verify with a translator

    Paste the expression in and confirm the plain-English reading matches what you intended before deploying it.

    Cron Expression Translator

Tips

  • Check whether your platform uses 5 fields (standard) or 6/7 (Quartz and some cloud schedulers add seconds or a year).
  • Confirm the time zone the scheduler uses. Many default to UTC, which can be off from local time by hours.
  • When both day-of-month and day-of-week are set (not *), standard cron runs the job when either matches, which surprises many people.
  • Test unusual expressions in a translator before deploying.

Common problems

The job runs at the wrong hour.

The server time zone is different from yours. Convert your intended time to the scheduler's zone.

The job never runs on the 31st.

Months without a 31st skip that date. Use a different pattern or handle end-of-month in the script.

Examples

Decoding a less obvious one: "*/15 9-17 * * 1-5"

Minute field "*/15" means every 15 minutes (so :00, :15, :30, :45). Hour field "9-17" restricts that to the range 9 through 17 (9am-5pm, 24-hour clock). Day-of-month and month are both "*" (no restriction). Day-of-week "1-5" means Monday through Friday. Put together: every 15 minutes, between 9am and 5pm, Monday to Friday - a typical "business hours" polling schedule, not a 24/7 one.

Frequently asked questions

What are the five fields in a cron expression?
Minute, hour, day of month, month and day of week, in that order.
What does */5 mean in cron?
Every 5 units of that field. In the minute field it means every 5 minutes.
What time zone does cron use?
The time zone of the server or scheduler running it, which is often UTC. Always check your platform.

Related related tools

Related articles

Ready to do it?

Free, no sign-up, and nothing is uploaded to a server.