Technology & Developers
Cron Expression Translator
Type a cron expression to see what it means in plain English, what each field matches and exactly when it will run next.
Free to useNo sign-up requiredNo watermarkRuns in your browser
A cron expression packs a schedule into five short fields, and a single misplaced character can mean a job runs every minute instead of once a day. This translator turns the expression into a plain-English sentence, breaks down what each field matches, and lists the next 10 times it will run.
It follows standard (Vixie) cron as used in Linux crontab, Kubernetes CronJobs and most CI schedulers: *, lists, ranges, steps, month and day names, 0 or 7 for Sunday and macros like @daily - including the easily-missed rule that when both day fields are set, a day matches if either one does.
How this tool works
Enter an expression
Type or paste five fields, or pick a preset such as “Weekdays at 9:00”.
Read the translation
The plain-English sentence and field breakdown update as you type.
Fix any errors
Each invalid field is named with the exact problem, such as a value out of range.
Check the next run times
See the next 10 runs in your time zone, or switch to UTC to match your server.
How it works
Each field is expanded into the set of values it matches: * is every value, 1-5 a range, 1,15 a list, */15 every 15th value from the start and 10-50/10 every 10th value within a range. Month and weekday names are case-insensitive, and 7 is folded into 0 for Sunday.
Day matching follows Vixie cron. If the day-of-month or day-of-week field starts with *, both must match. If both are restricted - for example 0 0 13 * 5 - a day matches when either does, so that runs on every 13th and every Friday, not only on Friday the 13th.
Next runs are found by walking the calendar from now: months that cannot match are skipped whole, then days, then hours, so rare schedules are found quickly. The search stops after 5 years, which is how an impossible schedule such as 30 February is reported rather than searched for ever.
Common use cases
- Checking a crontab line before deploying it to a server.
- Reading a Kubernetes CronJob, GitHub Actions or CI schedule someone else wrote.
- Confirming that a backup or report job runs when you think it does, in UTC or local time.
- Debugging a job that ran on the wrong days because both day fields were set.
- Finding out why a job never runs - for example a date that does not exist.
Cron syntax cheat sheet
| Fields, in order | minute (0-59) · hour (0-23) · day of month (1-31) · month (1-12) · day of week (0-7) |
|---|---|
| * | Every value |
| 5 | Exactly 5 |
| 1,15,30 | A list of values |
| 9-17 | A range, inclusive |
| */10 | Every 10th value from the start of the range |
| 0-30/10 | Every 10th value within a range: 0, 10, 20, 30 |
| JAN-DEC, SUN-SAT | Month and weekday names; 0 and 7 are both Sunday |
| @hourly | 0 * * * * |
| @daily / @midnight | 0 0 * * * |
| @weekly | 0 0 * * 0 |
| @monthly | 0 0 1 * * |
| @yearly / @annually | 0 0 1 1 * |
| @reboot | Once at daemon start-up - not a time schedule |
6- and 7-field cron (Quartz, Spring)
Quartz, Spring’s @Scheduled and some cloud schedulers add a seconds field at the start and sometimes a year field at the end, and support extra characters: ? for “no specific value”, L for last, W for nearest weekday and # for “nth weekday of the month”. This tool reads standard 5-field cron only and says so if you paste 6 or 7 fields - remove the seconds (and year) field to translate the rest, bearing in mind that ? L W # have no standard equivalent.
Worked examples
*/15 9-17 * * 1-5
Every 15 minutes between 09:00 and 17:59, Monday through Friday - 36 runs a day, the last at 17:45.
0 0 1,15 * *
At midnight on the 1st and 15th of every month. Changing the weekday field to 1 would also run it every Monday, because of the either-day rule.
Frequently asked questions
Which time zone does cron use?
Cron uses the time zone of the machine it runs on, unless your cron implementation supports CRON_TZ or TZ, or your platform sets it (Kubernetes CronJobs, for example, have a timeZone field). Many servers run in UTC, so use the UTC option to see run times as the server would.
Why does my job run on more days than I expected?
If both the day-of-month and day-of-week fields are restricted, standard cron runs the job when either matches. 0 9 1 * 1 runs on the 1st of each month and on every Monday. To get “the first Monday”, schedule every Monday on days 1-7 in the script, or use a scheduler that supports 1#1.
Does this support seconds or Quartz syntax?
No. It handles standard 5-field cron. It recognises 6- and 7-field expressions and Quartz characters (? L W #) and explains that they are not supported, rather than guessing.
What happens during daylight-saving changes?
In local time, a time that is skipped when clocks go forward does not exist, so it is left out of the list. Real cron daemons differ in how they handle skipped and repeated times, which is one reason many teams schedule in UTC.
Why does it say the expression never runs?
The schedule matches no real date within 5 years - usually a day that does not exist in the chosen month, such as 30 February or 31 April.
