Cron expression explainer

Paste a schedule from a crontab, a Hangfire RecurringJob, NCrontab or a Quartz trigger. You get it back in plain English, field by field, with the next five runs in UTC from a real matcher — and a flag on every trap the dialects disagree about, instead of a confident wrong answer.

Free API — use it from your own tools

The same engine powers an open API (this page uses it too). No signup, no key — just a rate limit of 60 requests per minute per IP. Handy for pull-request checks on job schedules, deployment scripts, and teaching materials.

curl

curl -X POST https://www.coder000.com/api/v1/cron-explain \
  -H "Content-Type: application/json" \
  -d '{"input": "0 0/15 9-17 ? * MON-FRI"}'

C#

using var http = new HttpClient();
var response = await http.PostAsJsonAsync(
    "https://www.coder000.com/api/v1/cron-explain",
    new { input = "30 2 * * MON-FRI" });
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result.GetProperty("output").GetString());

Uniform response shape: { "output": "…", "notes": [...], "warnings": [...] }output holds the description and the next runs, each note carries a change, an explanation, and sometimes a link to a post behind it; warnings are the things a scheduler will not tell you until 3 a.m.

What it checks, and what it will not pretend to know

Dialect detection from the field count and characters; ranges, lists, steps, names like MON and JAN; Quartz ?, L, W and #. It warns about days that never come (30 February), schedules that never fire, more than five runs a minute, a 5-field expression handed to Quartz, and the classic day-of-month and day-of-week trap — where Linux cron says either, Hangfire and NCrontab say both, and Quartz refuses to guess. Runs are shown in UTC; whether your scheduler agrees depends on its time-zone setting, which the notes spell out.