Cron to Text

Global tools

A cron expression is a schedule written as five fields of numbers, ranges, lists and stars: minute, hour, day of month, month, day of week. It is compact and precise, which is why every scheduler from a Linux crontab to a cloud job runner asks for it - and it is exactly the sort of line that is obvious at 3pm and indecipherable at 3am when the nightly job is late. This page says the schedule in plain words, field by field, so the reading is never left to your arithmetic.

Five fields for standard cron (minute, hour, day of month, month, day of week), with seconds first for the six-field form. The Quartz dialect reads the first six and handles names and the extra constants.

The three dialects count Sunday differently, read fields in a different order, and accept different special characters. Choose before you paste, or you will get a refusal explaining the shape.

Leave it blank for "cron-description.txt".

Results update as you type. Nothing leaves your device.

In plain words

At 09:00 on Monday-Friday

Read as vixie - the expression "0 9 * * 1-5".

Fires per day
1
Fires per week
5
Fields read
5

Field by field

FieldWrittenMeansNumbers it selects
Minute0:0000
Hour90909
Day of month*every day
Month*every month
Day of week1-5Mon-FriMon, Tue, Wed, Thu, Fri

The "Written" column is the field as it was typed (with the whitespace normalized); "Means" is what it asks for. In Vixie-compatible cron, when both day-of-month and day-of-week are restricted, a day counts only if it matches either - the classic rule nobody remembers.

What the schedule does not say

  • This dialect counts Sunday as 0 and accepts 7 as a second way of writing it, so 1 is Monday. Quartz counts Sunday as 1, and the same expression would name a different day there.
The expression was read and the description written in this browser tab: nothing was uploaded, nothing was sent, and nothing was stored.

It also deals with the thing that actually trips people: cron is not one dialect. The Vixie-compatible form counts Sunday as 0, the six-field form adds seconds at the front, and Quartz reads a different field order, counts Sunday as 1 and accepts names and extra constants. The same numbers can be valid in one dialect and refused in another, so you choose the dialect before you paste, and the refusal tells you which field was wrong rather than saying “invalid” with a shrug.

About this cron to text

This is the explainer half of the same scheduler machinery that previews a schedule on the cron expression generator page: the same reading rules, the same field rules, the same refusal text. Nothing is sent anywhere and no jobs are scheduled - the description is computed in the tab from the expression, and you can copy it or download it as the text people actually paste into a wiki or a runbook.

Use it to sanity-check a crontab before it ships, to turn a colleague’s five-field scratchpad into something a reviewer can read, or to explain a Quartz trigger to the person who will eventually have to debug it at 2am. It is a reader, not a writer: if you want to build an expression from day-of-week and time choices, the cron expression generator is the tool one tab over.

How this cron to text works

Five fields, six fields, and what each one counts

The standard form is five fields: minute (0-59), hour (0-23), day of month (1-31), month (1-12) and day of week (0-7 in Vixie-compatible cron, where 0 and 7 are both Sunday). A field can be a single value, a list (1,3,5), a range (9-17), a step (*/15), or a name where the dialect permits them, and this page expands all of those into words: “at minute 0, hour 9, every day of month, every month, Monday through Friday”.

Two forms add the seconds field at the front for jobs that need sub-minute timing, and Quartz turns the order around - second, minute, hour, day of month, month, day of week - counts Sunday as 1, and accepts names like MON and constants like L and W. Which form you mean changes the meaning of the same-looking numbers, which is why the dialect is a choice on the form and why the result names the dialect that read it.

Each of these forms is a choice on the page, and the dialect you pick changes how the same-looking numbers are read - which is why the result names the dialect that read the expression rather than leaving the reading ambiguous.

What it shows beyond the one-line summary

The heading is the schedule in plain words, and the rest of the page checks the reading. A field-by-field table lists each field as typed and as meant, so a range like 1-5 on day of week is spelled out as “Monday to Friday” instead of staying numbers. Counts answer the operational questions first: how many times a day the job fires, how many times a week, and how many fields were actually read.

Macros are handled too - @daily, @hourly and friends expand to the expression they stand for before the reading is shown. And when an expression does not parse, the page refuses by naming the failure: the field, the reason the value is outside the recognized range, and which dialect it was read as - because an expression that is invalid in one dialect is often perfectly legal in another.

Nothing here schedules or stores anything: the description is computed in the tab from the expression, and the download is a locally created blob, so an internal job line can be checked without ever leaving the browser.

Three things a description cannot tell you

A cron line says when to fire and says nothing about three things that decide whether the job actually runs. The first is the time zone: the expression is read in the zone the daemon runs in, so the same line on two servers fires at two different local times, and a line written for 09:00 follows that zone through daylight saving - which is why a job that ran at 08:00 or 10:00 on the changeover day behaved correctly rather than drifting.

The second is missed runs. A scheduler does not catch up: if the machine was off at the moment a job was due, that run is skipped rather than queued, and the description here is the intended schedule rather than a history of what happened. The third is overlap: nothing in the five fields stops a second copy starting while the first is still running, so an interval shorter than the job is a recipe for two copies of it.

None of this is visible in the expression, which is the argument for reading it out before it ships. The description gives you the cadence; these three questions tell you whether the system can survive that cadence. "Every fifteen minutes" and "a job that finishes in four" are two different claims, and only one of them is in the line.

Worked examples

Each example below was run through the calculator on this page when the site was built, so the numbers match what you see when you enter the same inputs.

A classic workday schedule

Cron expression: 0 9 * * 1-5 · Dialect: 5 fields - Linux, macOS, GitHub Actions

In plain words

At 09:00 on Monday-Friday

Read as vixie - the expression "0 9 * * 1-5".

Fires per day: 1 · Fires per week: 5 · Fields read: 5

Reads as “at 09:00, Monday to Friday” - once a day, five days a week, with no month or day-of-month restriction.

A maintenance window, Quartz style

Cron expression: 0 0 2 ? * 2-6 · Dialect: Quartz - Java schedulers, six fields or seven

In plain words

At 02:00 on Monday-Friday

Read as quartz - the expression "0 0 2 ? * 2-6".

Fires per day: 1 · Fires per week: 5 · Fields read: 6

Six fields read in Quartz order, where the day-of-week field is sixth and Sunday counts as 1, so 2-6 is Monday to Friday.

Frequently asked questions

Is my expression uploaded anywhere?

No. The expression is parsed by JavaScript in this tab and the description is built from the result; there is no request behind the page, and the download is a local blob. A cron line can carry the details of an internal job, so this page never touches a server.

Why does the same expression read differently to another tool?

Because cron has dialects. Vixie-compatible cron counts Sunday as 0, the six-field form adds seconds first, and Quartz counts Sunday as 1, reads the fields in a different order and accepts different special characters. Two tools that default to different dialects will describe the same numbers differently, and both will be right - which is why the dialect is a choice here and why the result names the one that was used.

What do 0 and 7 both mean for day of week?

In Vixie-compatible cron, 0 is Sunday and 7 is also accepted as Sunday, so 0-7 covers a whole week and 1-5 is Monday to Friday. Quartz instead numbers days 1-7 with 1 as Sunday and reads the day-of-week field after month, not before it. The field-by-field table is built to make this visible rather than letting it stay a footnote.

What is a step like */15 saying?

A step is “every n-th unit” from its starting value: */15 on the minute field means every 15 minutes (minutes 0, 15, 30, 45), and 9-17/2 on the hour means every other hour from 9 to 17. This page expands steps into their actual list in the description so the schedule is read as times, not as syntax.

What if my expression is invalid?

The page refuses it, but with a reason instead of a generic error: it names the field that failed, explains why the value is outside the recognized range for the chosen dialect, and shows the range that would have worked. An expression refused in one dialect may be valid in another, so the refusal is part of the reading, not a dead end.

Assumptions and sources

  • Descriptions follow the same cron conventions as the expression generator: five fields, Sunday as 0 or 7, plus the six-field and Quartz forms.
  • Macros such as `@daily` are expanded to the five-field expression they stand for, so the sentence matches what a crontab would actually run.
  • The reading happens in your browser; nothing is uploaded, stored or scheduled.

Last reviewed 2026-10-07. Runs locally on your device; keep backups; no financial advice applies. Read the full disclaimer.

Where a figure on this page comes from an official agency — HUD, IRS, FICO or a state body — the site keeps a dated snapshot of the source page in its sources library, and a scheduled job re-checks that snapshot, so the number can be traced back to the document it came from.