Time & Date
How to Read a Cron Expression Without Guessing
Learn to read any cron expression field by field, decode the special characters, and preview the next run times before you trust a schedule.
Try the toolCron Expression Parser →The five mystery numbers
You open a crontab, a Kubernetes CronJob, or a CI config and find a line like 0 9 * * 1-5. Is that every weekday at 9am, or something else entirely? Cron syntax is compact and unforgiving, and a misread schedule can mean a report that never sends or a backup that runs a thousand times too often. This guide shows you how to decode any cron expression with confidence.
The five fields
A standard cron expression has five space-separated fields, always in this order:
* * * * *
| | | | |
| | | | +-- day of week (0-6, Sun=0)
| | | +----- month (1-12)
| | +------- day of month (1-31)
| +--------- hour (0-23)
+---------- minute (0-59)Read left to right: minute, hour, day-of-month, month, day-of-week. So 0 9 * * 1-5 is minute 0, hour 9, any day-of-month, any month, days-of-week Monday through Friday — at 9:00 every weekday.
The special characters
Each field accepts four operators that do most of the work:
*— every value ("any minute", "any month").,— a list, e.g.0,30means at :00 and :30.-— a range, e.g.1-5means Monday to Friday./— a step, e.g.*/15in the minute field means every 15 minutes.
Combine them and expressions get expressive quickly:
*/15 * * * * # every 15 minutes
0 */2 * * * # at minute 0 of every 2nd hour
0 0 1 * * # midnight on the 1st of each month
30 8 * * 1 # 08:30 every Monday
0 0 1,15 * * # midnight on the 1st and 15thReading these by hand is doable but error-prone. Paste any expression into the Cron Expression Parser and it translates the schedule into a plain-English sentence and lists the upcoming run times, so you can verify your reading in seconds. It runs locally in your browser.
The pitfalls that catch everyone
- Day-of-month AND day-of-week. This is the classic trap. In standard (Vixie) cron, when both the day-of-month and day-of-week fields are restricted, they are combined with OR, not AND. So
0 0 13 * 5runs on the 13th of the month or any Friday — not only Friday the 13th. - Time zone. A bare cron expression carries no zone. It runs in whatever time zone the cron daemon or scheduler is configured for (often UTC on servers). Always confirm the host's zone before trusting a run time.
- Zero-based weekdays. Sunday is
0(and7on many systems). Off-by-one here silently shifts your whole schedule by a day. - Missing minute field.
* 9 * * *does not mean "at 9am" — it fires every minute during the 9am hour, 60 times. Pin the minute explicitly.
If your schedule needs to line up with a specific moment recorded elsewhere, remember that logs usually store that moment as epoch seconds; the Unix Timestamp Converter turns those into readable dates so you can cross-check.
Conclusion
Cron is only intimidating until you internalize the field order and the four operators. Read left to right, watch the day-of-month/day-of-week OR rule, and confirm the host time zone. When in doubt, let a parser show you the next few runs — verifying beats guessing when a missed job has real consequences. Ready to build one from scratch instead? See the Cron Expression Generator.