CRON Expression Parser

Validate any CRON expression instantly — get a plain-English description, a color-coded field breakdown, and a preview of the next scheduled run times.

Enter a CRON expression above…
Times shown in your browser's local timezone
Next run times will appear here once the expression is valid.

What Is a CRON Expression?

A CRON expression is a compact string used by the cron daemon (and many modern schedulers) to specify recurring time-based schedules. Originating in Unix systems in the 1970s, the format is now used universally — in Linux servers, Kubernetes CronJobs, AWS EventBridge, GitHub Actions schedules, Jenkins, GitLab CI, and countless application-level task schedulers.

A standard CRON expression has five fields, separated by spaces:

┌───── Minute    (0–59)
│ ┌─── Hour      (0–23)
│ │ ┌─ Day       (1–31)
│ │ │ ┌ Month    (1–12 or JAN–DEC)
│ │ │ │ ┌ Weekday (0–6 or SUN–SAT, 0 = Sunday)
│ │ │ │ │
* * * * *

The Quartz Scheduler (Java) and frameworks like Spring use a six-field variant that prepends a Second field (0–59), allowing sub-minute precision.

CRON Special Characters

CharacterMeaningExampleResult
*Every value in the range* * * * *Every minute
*/nEvery n-th value (step)*/15 * * * *Every 15 minutes
n-mInclusive range0 9-17 * * *Every hour from 9 AM to 5 PM
n,mList of values0 0 * * 1,3,5Mon, Wed, Fri at midnight
n-m/sRange with step0-30/5 * * * *Minutes 0,5,10,15,20,25,30
?Any value (Quartz only — same as *)0 0 ? * 1Every Monday at midnight

Common CRON Patterns

ExpressionDescription
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour (at the top of the hour)
0 */6 * * *Every 6 hours
0 0 * * *Every day at midnight
0 9 * * 1-5Every weekday at 9:00 AM
0 0 * * 0Every Sunday at midnight
0 0 1 * *First day of every month at midnight
0 0 1 1 *January 1st at midnight
*/30 9-17 * * 1-5Every 30 min during business hours on weekdays

How the CRON Day Fields Work Together

The day-of-month and day-of-week fields have a special relationship. According to the POSIX standard:

This OR behavior surprises many developers. If you intend AND logic (run on Mondays that fall on the 1st), you need to handle that in your script logic, not the CRON expression.

5-Field vs 6-Field (Quartz) CRON

The Quartz Scheduler (used in Java/Spring applications) adds a second field at the beginning, enabling second-level precision. AWS EventBridge and some cloud schedulers also support a 6-field format. Key differences:

Real-World Examples

Database Backup — Every Day at 2 AM

Run a backup script once per day during low-traffic hours.

0 2 * * *

Explanation: At minute 0 of hour 2, every day, every month, every weekday.
Runs: 2026-05-17 02:00, 2026-05-18 02:00, 2026-05-19 02:00…

Health Check — Every 5 Minutes

Ping a service endpoint and alert if it is down.

*/5 * * * *

Explanation: Every 5 minutes, all day, all week.
Runs: :00, :05, :10, :15, :20, :25, :30, :35, :40, :45, :50, :55

Weekly Report — Mondays at 8 AM

Generate and email a weekly summary to stakeholders.

0 8 * * 1

Explanation: At 8:00 AM every Monday.
Named equivalent: 0 8 * * MON

Frequently Asked Questions

The most common causes are: (1) the server timezone differs from your expectation — CRON uses the system timezone, not UTC; (2) the expression uses OR logic for day-of-month and day-of-week when you expect AND; (3) the task itself runs but produces an error — check system mail or redirect output to a log file.

Standard 5-field CRON has a minimum granularity of 1 minute. If you need sub-minute intervals, use 6-field Quartz/Spring CRON, or use a loop inside your script (e.g., sleep 30 between executions within a minutely cron job). Cloud schedulers like AWS EventBridge support 1-minute minimum in 5-field mode.

? means "no specific value" and is used in the Quartz scheduler when you want to specify one of the day fields without constraining the other. Since you can't say "on the 15th AND on Wednesday" simultaneously, you use ? for the unconstrained field. For example: 0 0 15 * ? = "at midnight on the 15th of every month, any weekday".

In standard CRON, both 0 and 7 equal Sunday. Most implementations accept either. Monday is 1, Tuesday is 2, and so on through Saturday = 6. You can also use the named equivalents: SUN, MON, TUE, WED, THU, FRI, SAT. In Quartz, the numbering shifts: 1 = Sunday, 2 = Monday, … 7 = Saturday.

Standard CRON has no built-in "last day of month" symbol. Common workarounds: (1) use 28-31 in the day field combined with a script-level check; (2) in Quartz, use the special L character (0 0 L * ?); (3) schedule for the 1st of the month and process the previous month's data instead.

*/5 in the minute field means "every 5 minutes" (0, 5, 10, 15… 55). 5 alone means "only at minute 5" — so 5 * * * * runs once per hour at :05, not every 5 minutes. A common mistake is writing 5 * * * * when the intention is */5 * * * *.

The parser iterates forward from the current time in 1-minute (or 1-second for 6-field) increments, checking each candidate timestamp against all five fields. This brute-force approach is simple and correct for all valid expressions, including complex combinations of ranges, steps, and lists. All computation runs locally in your browser — no data is sent to a server.

Yes. Most CRON implementations (and this parser) accept the first three letters of the month name (JAN, FEB, MAR… DEC) and weekday name (SUN, MON, TUE… SAT). You can mix numeric and named values in the same expression: 0 9 * JAN-MAR 1-5 runs weekdays at 9 AM during the first quarter of the year.