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.
- 1Count the five fields: minute, hour, day-of-month, month, day-of-week.
- 2Match each field to its allowed range.
- 3Decode any *, comma, dash or slash characters.
- 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
| Expression | Plain English |
|---|---|
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes |
| 0 * * * * | Every hour, on the hour |
| 0 0 * * * | Every day at midnight |
| 30 9 * * 1-5 | 09:30 on weekdays |
| 0 0 1 * * | First day of every month at midnight |
| 0 0 * * 0 | Every Sunday at midnight |
| 0 8 1 1 * | 08:00 on 1 January |
| 0 22 * * 5 | Fridays at 22:00 |
Step by step
Identify the five fields
Split the expression on spaces: minute, hour, day-of-month, month, day-of-week, in that order.
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.
Decode any special characters
* means every value, a comma lists several, a dash is a range, and a slash is a step.
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
- Cron Expression TranslatorType a cron expression to see what it means in plain English, what each field matches and exactly when it will run next.
- JSON FormatterBeautify, minify and validate JSON, with real error messages.
Related articles
Ready to do it?
Free, no sign-up, and nothing is uploaded to a server.
