# Cron Expression Parser

- **URL:** https://codeasystem.com/calculators/developer/cron-parser/
- **Category:** developer
- **Description:** Translate five-field cron expressions into plain English, validate every field range and list the next scheduled run times.
- **Primary output:** Schedule description: Every minute

## Inputs
- Cron expression (name: `expression`, type: text, example: */15 9-17 * * 1-5)
- Upcoming runs to show (name: `count`, type: number, example: 5)

## Outputs
- Schedule description: Every minute
- Next run #1: 2026-08-23 15:42 (local time)
- Next run #2: 2026-08-23 15:43 (local time)
- Next run #3: 2026-08-23 15:44 (local time)
- Next run #4: 2026-08-23 15:45 (local time)
- Next run #5: 2026-08-23 15:46 (local time)

## Formula / methodology
```
fields: minute(0-59) hour(0-23) dom(1-31) month(1-12) dow(0-7); syntax: * , - /
```

Each of the five fields parses into a set of allowed values supporting lists (commas), ranges (dashes) and steps (slashes), with standard Vixie semantics; including the either-side rule when both day-of-month and day-of-week are restricted. Field ranges validate strictly with named errors.

A human-readable description assembles from the parsed sets, then a minute-by-minute scan over the next 366 days collects the upcoming run times against your local clock so you can confirm the schedule means what you think it means.

## Assumptions & limitations
- Standard five-field crontab syntax; seconds-level crons are not modeled.
- @-macros and name forms (JAN, MON) are rejected rather than guessed.
- Run predictions use your device time zone; servers often run cron in UTC.

## How to use
1. **Paste the expression**; Straight from your crontab, Kubernetes CronJob or CI config.
2. **Read the description**; The plain-English summary catches inverted fields and off-by-one hours instantly.
3. **Check the next runs**; Concrete upcoming timestamps verify daylight-saving and weekend behavior before deployment.

## Example
* * * * * matches every minute of every day, so the description reads simply “Every minute” and the next run lands within sixty seconds of now.

Result for these inputs:

```
Schedule description: Every minute
```

## About this calculator
### The classic cron gotchas this parser exposes

- Day-of-month AND day-of-week both restricted → fires when EITHER matches (standard behavior)
- 0 0 * * * is midnight local on the server, which may be UTC
- Ranges wrap nothing: 23-2 in hours is invalid, not cyclic
- Steps need an anchor: */15 starts at the field minimum

### Why predicting runs beats eyeballing

DST transitions make “daily at 2:00” fire once, twice or never depending on locale. Scanning actual calendar minutes surfaces those anomalies before production does.

## FAQs
### Why is @daily rejected?

Macros are shorthands for fixed expressions; @daily is just 0 0 * * *. Writing it out keeps validation honest about what actually runs.

### What time zone do the next runs use?

Your device’s current zone. Production cron daemons frequently run UTC; convert accordingly before comparing.

### Is 7 accepted for Sunday?

Yes; day-of-week treats 0 and 7 equivalently, per POSIX crontab convention.

### How far ahead does the search look?

366 days. A schedule matching no minutes in that window (like February 30th) reports an explicit error instead of pretending.

## Related calculators
- [Unix Timestamp Converter](https://codeasystem.com/calculators/developer/timestamp-converter/)
- [Regex Tester](https://codeasystem.com/calculators/developer/regex-tester/)
- [Chmod Calculator](https://codeasystem.com/calculators/developer/chmod-calculator/)

---
Last updated: 2026-08-23 · Version: 1.0.0 · [HTML version](https://codeasystem.com/calculators/developer/cron-parser/)
