Cron expression parser

Break an expression into fields, see what each token expands to, and learn which rule combines the day fields.

Dialect set manually: Unix.
NATIVE exact Unix
0Minuteat minute 0
0Hourthe 00:xx hour
*/2Day of monthevery 2nd day
*Monthevery month
1Day of weekMonday

At 00:00, on Monday.

  • Times are in UTC.
  • Warning: Both day fields are restricted, but "*/2" starts with "*", so Vixie/cronie require BOTH to match (AND), not either (OR).AMBIGUOUS_SEMANTICS, column 5Fix: This is a well-known cron quirk. If you meant OR, rewrite the step as an explicit range (e.g. 1-31/2).

Loading the simulator…

Every token, explained in place

The field strip under the input labels each token with its field and meaning; focus or hover a token to read it. The parser expands ranges, lists and steps into the concrete values it will match, so “*/7” in the minute field shows up as 0, 7, 14 … 56 — and the warning tells you the gap from :56 to :00 is four minutes, not seven.

The example loaded here is a classic surprise. In Vixie cron, when both day fields are restricted the job runs if either matches. But if a day field starts with “*” — as “*/2” does — cron requires both. So 0 0 */2 * 1 runs only on odd-numbered days that are also Mondays. Kubernetes’ parser treats the same text differently. The parser shows which rule it applied and why.

Check a specific date

The Check date tab answers “why didn’t it run on Saturday the 31st?” by testing each field against a date and time you choose and reporting the first field that fails, including the OR/AND decision for the day fields.

Try these

Questions

What does “?” mean in a cron expression?

In Quartz and AWS, “?” means “no specific value” and must appear in exactly one of day-of-month or day-of-week. Kubernetes accepts it as a synonym for “*”. Unix cron rejects it.

Are names like MON and JAN case-sensitive?

No. All supported dialects accept three-letter names in any case. Full names such as MONDAY are rejected by cron parsers (systemd accepts them).