Cron Expression Parser
Parse a cron expression and translate it to plain English.
Overview
Paste a cron expression and read it back as plain English: "Every 15 minutes from 9 AM to 5 PM, weekdays only." Fields are validated against the standard cron grammar, with errors flagged inline if you typo a value or forget a separator.
It's for backend developers, SREs, and anyone configuring scheduled jobs - cron, systemd timers, GitHub Actions schedules, Kubernetes CronJob, or any framework that borrowed cron syntax. Reach for it when debugging a missed run, reviewing a teammate's PR, or translating an ops requirement ("first Monday of each month at 3 AM") into a working expression.
How it works
Standard Unix cron expressions have five fields: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), day-of-week (0-6, where 0 and 7 both mean Sunday). The parser supports the full POSIX vocabulary plus the common Vixie-cron extensions: lists (1,15,30), ranges (1-5), step values (*/15), and named months/weekdays (JAN, MON).
The English translation walks each field and groups them in the natural reading order - frequency first, then time of day, then day filters - so the output reads like a sentence rather than a field-by-field dump.
Examples
- Every weekday at 9 AM:
0 9 * * 1-5 -> At 09:00 AM, Monday through Friday - Every 15 minutes:
*/15 * * * * -> Every 15 minutes - First day of every month at midnight:
0 0 1 * * -> At 12:00 AM, on day 1 of the month - Every Sunday at noon:
0 12 * * 0 -> At 12:00 PM, only on Sunday
FAQ
Does this support 6-field (Quartz) cron?
This tool reads 5-field Unix cron. For Quartz's seconds-first 6-field syntax (used by Java schedulers and AWS EventBridge), see the Cron -> Quartz / EventBridge converter.
Why does day-of-month and day-of-week behave oddly together?
When both fields are restricted (not *), traditional cron treats them as OR - the job runs if either matches. Most users intuitively expect AND, so be careful when combining them.
What about @daily, @hourly, and @reboot?
Vixie-cron supports nicknames that expand to standard expressions: @daily is 0 0 * * *, @hourly is 0 * * * *. @reboot runs on startup and has no time-based equivalent.
Does cron use local time or UTC?
System cron uses local time by default. Cloud schedulers (GitHub Actions, EventBridge, Cloud Scheduler) typically use UTC unless you specify otherwise - always check the documentation for the platform.