Cron Expression Parser

Parse a cron expression and translate it to plain English.

Open tool

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.

Try Cron Expression Parser

An unhandled error has occurred. Reload ×