A cron expression is five fields describing when something should run: minute, hour, day of month, month, and day of week. It is a wonderfully compact notation and almost impossible to read confidently, which is why a scheduled job running at the wrong time is such a common and long-lived bug.

This parser does the two things that actually resolve the doubt. It describes the schedule in plain English, and it computes the next several times the expression will fire. The second is the one that settles arguments: a description can still be misread, but a list of concrete timestamps cannot.

It handles the full field syntax you will meet in practice: asterisks, single values, comma-separated lists, ranges with a hyphen, step values with a slash, and named months and weekdays. Both zero and seven are accepted as Sunday, matching what real cron implementations do.

The trap worth knowing about is the interaction between day-of-month and day-of-week. If both are restricted to something other than an asterisk, standard cron treats them as an OR rather than an AND, so an expression meaning "the 1st" and "Monday" fires on the 1st and on every Monday, not only on a Monday that happens to be the 1st. This surprises almost everyone the first time. The tool flags it explicitly when your expression hits that case.

Times are computed in your local timezone and also shown in UTC, because that mismatch is the other classic cause of a job firing at an unexpected hour. Most servers and container schedulers run in UTC, so a schedule that looks correct on your laptop can be hours off in production.