# Cron Expression Explainer - Plain English and the Next 10 Run Times

Page: https://hirantha.me/tools/cron-expression-explainer
Part of: Hirantha Sandaruwan Lakshan free tools (https://hirantha.me/tools)
Updated: 2026-10-15

Paste a five-field cron expression to read it in plain English, see a field-by-field breakdown and list the next 10 run times in any time zone.

This is a free tool that runs in the browser: open the page to use it. File tools process files on the visitor's own device; files are never uploaded or stored. No account, sign-up, payment or watermark.

Paste a standard five-field cron expression such as 0 9 * * 1-5 and read what it does in plain English, field by field, and see the next ten times it runs in the time zone you choose, Asia/Colombo included. It follows the crontab rules of Vixie cron and cronie, including the either/or rule for day of month and day of week. Quartz, Spring and AWS cron are different formats and are not supported. Nothing leaves your browser.

A standard crontab entry has five fields separated by spaces: minute (0 to 59), hour (0 to 23), day of month (1 to 31), month (1 to 12 or JAN to DEC) and day of week (0 to 7, where 0 and 7 are both Sunday, or SUN to SAT). A field can hold a list (1,15), a range (1-5), a star for every value, and a step: */5 means every fifth value, and 1-10/2 means 1, 3, 5, 7 and 9. A step must follow a star or a range: cronie rejects a step after a single number, as in 5/15. The macros @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly stand for ready-made schedules (cronie reads their names in lower case only, so @DAILY is an error), and @reboot means once after the machine boots, when the cron service starts. The plain English text is produced by this tool's own code from the parsed fields. Cron looks at its entries once a minute, so the smallest step is one minute and there is no seconds field.

When both the day of month and the day of week are restricted, the job runs when either one matches. crontab(5) says: if both fields are restricted (do not contain the star character), the command will be run when either field matches the current time. So 30 4 1,15 * 5 runs at 04:30 on the 1st, on the 15th and on every Friday, not only on a Friday that is the 1st or 15th. The test is made on the first character of the field, which is how cronie's source reads it: a field that starts with * counts as unrestricted even with a step, so 0 0 */2 * 1 means every second day of the month that is also a Monday, because then both must match. The tool describes both cases and explains which one applies.

Cron runs in the time zone of the machine, or the one set by CRON_TZ in cronie. The next run times are worked out in the zone you pick: each local clock time that matches the schedule is turned into a real moment with your browser's time zone data, so the offset from UTC and any daylight saving change are the zone's own. Clock changes need a rule, and cron programs differ. cronie's cron(8) says that local time changes of less than three hours are handled in a special way for jobs that run at a specific time: if the time was adjusted forward, the jobs that would have run in the skipped interval run immediately, and if it was adjusted backward, running the same job twice is avoided. Debian's cron(8) says the same and spells out which jobs are affected: those without a star in the minute or hour field. Jobs with a star there run by the new time, and cronie's source tests those same two fields. The crontab(5) page of cronie describes plain matching instead: a time that does not exist never matches, and a time that happens twice matches twice. The tool follows the cron(8) rule by default and can show plain matching, and it marks every run that a clock change affects. Other cron programs may differ, so check a run near a change on your own system.

Several other tools use the word cron for a different format. Quartz and Spring put a seconds field first, so they have six fields (Quartz allows a seventh, the year). Amazon EventBridge has six fields with no seconds and a year last. Quartz, Spring and EventBridge all use ? L W and # in the day fields, and EventBridge requires a question mark in one of the two day fields and counts the days of the week from 1. This tool does not read them: a six or seven field expression, or a field with ? L W or #, gets a message that says so rather than a wrong answer. If you paste a whole crontab line, the text after the fifth field is shown as the command and ignored. Names such as MON-FRI are accepted, as cronie allows, although Debian's crontab(5) says ranges or lists of names are not allowed, so use numbers if you are unsure.

Common cron expressions and what they mean:
| Expression | What it means |
| --- | --- |
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes |
| */15 9-17 * * 1-5 | Every 15 minutes from 09:00 to 17:59, on Monday through Friday |
| 0 * * * * | Every hour, on the hour |
| 0 9 * * 1-5 | At 09:00, on Monday through Friday |
| 0 9,17 * * * | At 09:00 and 17:00 every day |
| 30 2 * * * | At 02:30 every day |
| 0 0 1 * * | At 00:00, on day 1 of the month |
| 0 0 1 1,4,7,10 * | At 00:00, on day 1 of the month, in January, April, July and October |
| 30 4 1,15 * 5 | At 04:30, on days 1 and 15 of the month or on Friday |
| 0 0 * * 0 | At 00:00, on Sunday |
| @daily | At 00:00 every day |

Q: Which time zone does cron use?
A: The time zone of the machine it runs on. cronie also lets a crontab set CRON_TZ for its own entries. Choose the zone your server uses in the time zone box, because the same expression runs at different moments in different zones. Asia/Colombo is UTC+05:30 all year.

Q: What happens when both day of month and day of week are set?
A: If neither field starts with *, the job runs when either one matches, as crontab(5) says. 0 0 1 * 5 runs on the 1st of every month and on every Friday. If one of the two fields starts with *, both must match, so 0 0 */2 * 1 runs only on odd-numbered days that are also Mondays.

Q: What does */5 mean, and why is */7 uneven?
A: A star with a step means every fifth value from the start of the range. In the minute field */5 is minutes 0, 5, 10 and so on up to 55. The step restarts each hour, so */7 gives 0, 7 and so on up to 56, and then 0 again four minutes later. Use a step that divides 60 for minutes and 24 for hours if you want an even rhythm.

Q: Is Sunday 0 or 7?
A: Both. crontab(5) lists the day of week as 0 to 7 with 0 or 7 meaning Sunday. The tool treats them the same, and a range like 5-7 means Friday, Saturday and Sunday.

Q: What does cron do when daylight saving time starts or ends?
A: It depends on the program. cronie's cron(8) says that for changes under three hours, a job that runs at a specific time and falls in a skipped interval runs immediately, and a job is not run twice when the clocks go back. Debian's cron(8) adds that jobs with * in the minute or hour field run by the new time. cronie's crontab(5) describes plain matching instead: a time that does not exist never matches and a repeated time matches twice. The tool shows the cron(8) behaviour by default, offers plain matching, and marks the affected runs. If it matters, run the server in UTC.

Q: Why does my Quartz, Spring or AWS cron expression not work here?
A: Those are different formats. Quartz and Spring start with a seconds field, so they have six or seven fields. EventBridge has six, with a year at the end. All three also use ?, L, W and # in the day fields. Standard Unix cron has exactly five fields and none of those characters. The tool reports the mismatch instead of guessing.

Q: Can I use names such as MON-FRI or JAN,JUL?
A: The tool accepts three-letter names for the month and day of week, in any case, in lists and ranges. cronie's crontab(5) allows that. Debian's crontab(5) says ranges or lists of names are not allowed, so on Debian or Ubuntu the safe choice is numbers, such as 1-5.

Q: Does cron support seconds?
A: No. Standard cron has no seconds field, and the daemon examines its entries once a minute (crontab(5)). To run something more often than once a minute you need a loop in the script, a systemd timer, or a different scheduler.

Q: What does the percent sign do in a crontab line?
A: In the command part of a crontab entry, an unescaped % is changed into a newline, and everything after the first % is sent to the command as standard input (crontab(5)). A date command such as date +%F in a crontab needs each % written as \%.

Q: What does @reboot do?
A: It runs the command once after the machine boots, when the cron service starts. cronie leaves a lock file once it has run its @reboot jobs, so restarting only the cron service does not run them again; other cron programs may treat a restart differently. It has no clock schedule, so there are no run times to list.

Sources: crontab(5), cronie (man7.org) (https://man7.org/linux/man-pages/man5/crontab.5.html); cron(8), cronie (man7.org) (https://man7.org/linux/man-pages/man8/cron.8.html); cronie source: cron.c (the day matching and clock change logic) (https://github.com/cronie-crond/cronie/blob/master/src/cron.c); cronie source: entry.c (the field parser and macros) (https://github.com/cronie-crond/cronie/blob/master/src/entry.c); crontab(5), Debian cron (https://manpages.debian.org/bookworm/cron/crontab.5.en.html); cron(8), Debian cron (clock changes and which jobs they affect) (https://manpages.debian.org/bookworm/cron/cron.8.en.html); Quartz CronTrigger tutorial (a different format) (https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html); Spring CronExpression (a different format) (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronExpression.html); Amazon EventBridge cron expressions (a different format) (https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html)

Related tools:

- [Timestamp converter](https://hirantha.me/tools/timestamp-converter.md): Convert between Unix epoch time and human-readable dates.
- [Colombo time converter (Sri Lanka time)](https://hirantha.me/tools/colombo-time-converter.md): Convert Sri Lanka time (Colombo, UTC+5:30) to London, New York, Dubai, Singapore, Sydney and more, with the day change and shared working hours.
- [Chmod calculator](https://hirantha.me/tools/chmod-calculator.md): Tick read, write and execute boxes to get the chmod number and rwxr-xr-x string, read u+x style changes, work out a umask, and copy safe chmod and find commands.
- [Regex tester](https://hirantha.me/tools/regex-tester.md): Test a regular expression against sample text and see every match.
