⌕ Test & Debug

Cron Expression Parser

Parse standard, Quartz.NET and Hangfire cron expressions into plain English and see the next 12 scheduled run times.

Updated

Quartz.NET & Hangfire Next 12 runs Plain English L, W and #

Loading Cron Parser…

What this page sends

  • Your input: Processed in this tab and not sent to a server.
  • Page load: Loading the page requests HTML, scripts and images from ByteKiln, fonts from Google Fonts, and sends Google Analytics page views, tool-usage events and catalog interactions (tool/category IDs, result status and whether a click followed search — never your input, output or search terms). Privacy & sharing

How the Cron Expression Parser Works

The ByteKiln Cron Parser tokenizes each field, expands step and range expressions into value sets, and translates them into plain English. The next-run calculator iterates from the current minute forward.

Field parsing

Each of the five fields is expanded into a sorted set of matching values. Step expressions (*/5, 10-30/2), ranges (1-5), lists (1,3,5), and wildcards (*) are all supported. Named aliases like MON, TUE, JAN are also recognized.

Next run calculation

Starting from the next minute, the calculator checks each minute against the expanded field sets. When all five conditions match, that datetime is a scheduled run. The process repeats until 12 matches are found.

Day of week vs day of month

When both the day-of-month and day-of-week fields are non-wildcard, Unix cron fires when either matches (OR logic). When one is a wildcard and the other is specified, only the specified field is used. Hangfire (Cronos) uses AND instead, and Quartz.NET refuses the combination: one of the two must be ?.

Dialects: Quartz.NET and Hangfire

The dialect selector changes the grammar. Quartz.NET expressions start with a seconds field, may end with a year (1970–2099), number days of the week from 1 = Sunday, and support L (last), W (nearest weekday) and # (nth weekday). Hangfire uses Cronos: optional leading seconds, 0 = Sunday, and the same L, W and # extensions. Whenever a day-of-week number appears, the parser shows what it means in the selected dialect and how the other two dialects read the same expression.

Limitations

  • Three dialects only: standard five-field cron, Quartz.NET and Hangfire (Cronos). Spring, AWS EventBridge and Jenkins H syntax are not modelled.
  • Next runs use your browser's time zone or UTC. Your server, or Hangfire's default of UTC, may differ — pick the zone the scheduler actually uses.
  • It doesn't model scheduler-specific behaviour: missed runs while a machine was off, jitter, GitHub Actions' delays under load, or Kubernetes CronJob's startingDeadlineSeconds.
  • Daylight-saving transitions follow the browser's calendar; a job at 02:30 on a spring-forward night may not appear.

FAQ

Short answers for the things developers usually ask before trusting a tool.

What is a cron expression?

A cron expression is a string of five space-separated fields that define a schedule for repeated tasks: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–6, where 0 is Sunday). Special characters like * (any), / (step), - (range), and , (list) combine to express complex schedules.

What does */5 mean in a cron expression?

*/5 means "every 5 units". In the minute field, */5 means every 5 minutes (0, 5, 10, 15…). In the hour field, */5 means every 5 hours. The asterisk means "start from the minimum value of the field", and /5 means step by 5.

What is the difference between 0 * * * * and * * * * *?

* * * * * runs every minute. 0 * * * * runs once per hour, at minute 0 (i.e., at the top of each hour: 00:00, 01:00, 02:00…). The first field is the minute field, so 0 pins execution to the start of each hour.

Why does 1 mean Sunday in a Quartz cron expression?

Quartz.NET numbers day-of-week from 1 = Sunday to 7 = Saturday, while standard cron and Hangfire (Cronos) use 0 = Sunday, 1 = Monday. So "0 0 12 ? * 1" runs on Sundays in Quartz, and the same 1 means Monday elsewhere — a silent wrong-day bug. Quartz also needs ? in exactly one of day-of-month and day-of-week. Pick the Quartz.NET dialect and the parser flags the numbering and shows how the other dialects read the same text. Names like MON-FRI mean the same everywhere.

Why does the next run calculator show local times?

The cron parser uses your browser's local timezone for the next-run display. Cron daemons on servers run in the server's timezone (usually UTC). If your server is on UTC and you're viewing from a different timezone, the displayed times are offset accordingly.

What cron format does Hangfire use?

Hangfire parses cron with the Cronos library: five fields, or six with seconds first. It supports L, W and #, treats ? like *, and accepts 0 or 7 for Sunday. Unlike standard cron, when both day-of-month and day-of-week are set it requires both, so "0 0 13 * 5" is Friday the 13th. Recurring jobs run in UTC unless you pass a time zone. It also accepts the @daily-style macros and @every_second.

Related tools

Useful follow-ups when one conversion usually turns into three more.

Want the background and worked examples? There's a longer write-up.

Read the Cron Parser guide

Related guides