Skip to content
← Code Tools

Cron Next Fire

Verify any cron expression by previewing its next 10 fire times

Cron Next Fire (Next 10 Fire Times)

A cron expression that looks correct can hide subtle bugs that only show up at runtime, sometimes weeks later. A schedule that should fire daily at 2am quietly fires every minute because of a stray comma; a job that should run on the last day of the month never fires because the expression uses L in a flavor that does not support it; a UTC vs local-time confusion shifts the fire time by hours. This tool sidesteps that whole class of bug: paste the expression, pick the timezone, see the next 10 fire times rendered as ISO timestamps, and confirm the cadence matches intent before you ship the crontab.

Five-Field, Six-Field, and Quartz

Standard POSIX cron uses five space-separated fields: minute, hour, day-of-month, month, day-of-week. Modern systems often add a sixth seconds field at the front (used by Vixie cron's variants and most language-level cron parsers). Quartz — the de-facto Java cron flavor — adds a seventh year field at the end and introduces the ? wildcard, which is used in either day-of-month or day-of-week to mean "no specific value" when the other field is constrained. The tool auto-detects field count and dispatches to the appropriate parser; for the 6-field case it defaults to second-zero so the fire times always land on whole seconds unless you explicitly specify otherwise.

Timezone Handling Done Right

The single most common cron bug is timezone confusion. A crontab line on a UTC-configured server fires in UTC; a crontab line on a local-time-configured server fires in local time; a Quartz schedule respects the trigger's timeZone property if set. This tool exposes the timezone as a first-class input, defaulting to your browser's IANA zone but offering the full IANA list (America/New_York, Europe/London, Asia/Tokyo, UTC) so you can preview a schedule for the timezone the production server actually runs in. The output column shows both the absolute timestamp in the selected zone and the local-to-you offset so you can sanity-check at a glance.

Special Characters and Step Values

Beyond the basics (numbers, lists, ranges) the parser supports the step operator / for every-N-units expressions, the wildcard *, named day-of-week (MON, TUE) and named month (JAN, FEB), and the L last-day-of-month or last-given-weekday-of-month operators where supported by the dialect. Combinations like 0 0 1,15 * MON-FRI (midnight on the 1st and 15th of every month, only if it lands on a weekday) are previewed correctly. The dialect-specific bits (L, W, # in Quartz) are noted in the parser output when they are accepted, so you can tell which features are in play.

Use It Before You Deploy

The cron schedule field is usually the smallest piece of a job definition and the easiest place to make an undetected mistake. This tool is meant for the moment between writing the expression and committing the deploy: paste it in, scan the next 10 fire times, and make sure the cadence matches what you intended. For unusual cases (a schedule that fires fewer than 10 times per year, like 0 0 1 1 * for once-a-year), increase the preview count or extend the lookahead window. For very-frequent expressions (every-second or every-minute schedules), the first 10 fire times will all be within the next minute or hour and confirm the cadence rather than the calendar placement.

Pair this tool with the rest of the UDT scheduling and devops cluster: our crontab guide for a refresher on syntax, the cron + chmod server guide for permission gotchas, Timestamp Converter for ISO-8601 round-trips, and Regex Tester for any pattern-matching needs in the surrounding job logic.

Frequently Asked Questions

Is my cron expression sent to a server?+
No. Parsing and the next-fire computation run entirely in your browser. The expression and the timezone selection never leave the tab. You can verify in the Network tab that no requests fire while the tool computes the preview.
Which cron flavors are supported?+
Three: 5-field POSIX (minute, hour, day-of-month, month, day-of-week), 6-field with leading seconds (used by most modern cron parsers), and 7-field Quartz with a trailing year. The tool auto-detects the field count and dispatches to the appropriate parser. Special characters (L, W, #) work where the flavor supports them.
Why does the preview start at the wrong time?+
Almost always a timezone issue. Check the timezone picker in the form — it defaults to your browser's IANA zone, but a production crontab may run in UTC, in the server's local zone, or (for Quartz triggers) in whatever zone the trigger specifies. Pick the right zone and the preview should match what you expect.
Does it handle the Quartz ? wildcard?+
Yes. In Quartz, ? means "no specific value" and is used in either day-of-month or day-of-week when the other is constrained — it would be ambiguous otherwise. The parser accepts it and produces the same fire times that Quartz itself would for the equivalent expression. For 5- and 6-field POSIX, ? is not accepted; use * instead.
Can I preview a schedule that fires only once a year?+
Yes, but the default preview of 10 fire times will span a decade in that case. Increase the lookahead window to a fixed end date instead of a count, or accept the wide span. For schedules with very long inter-fire gaps (like 0 0 29 2 * on February 29) the gaps are exactly what you would expect from the leap-year cadence.
What about expressions like @daily, @hourly, @yearly?+
The named-shortcut expressions are pre-expanded to their equivalent canonical forms before parsing: @hourly becomes 0 * * * *, @daily becomes 0 0 * * *, and so on. The preview shows the canonical form alongside the original input so you can confirm the expansion is what you expected.
Does it handle daylight-saving-time transitions correctly?+
Yes, where the IANA timezone database provides the rules. Across a spring-forward boundary, fire times in the missing hour are skipped per the convention of the underlying cron implementation (most match Vixie's behavior). Across a fall-back boundary, fire times in the repeated hour fire once, not twice. For most schedules this is invisible; for schedules with hour-level granularity near the transition, the preview shows the actual UTC moment so you can confirm exactly which side of the boundary each fire lands on.
Is the parser the same as the one cron itself uses?+
It is a faithful re-implementation, not a binding to a system cron. The behavior matches Vixie cron's semantics for the 5-field case, Quartz's documented behavior for the 7-field case, and the most common 6-field-with-seconds implementations for that case. For very unusual expressions, the canonical test is always to run the schedule on the target system and observe the actual fires; the tool is a fast preview, not a substitute for production verification.

Built by Derek Giordano · Part of Ultimate Design Tools

Privacy Policy · Terms of Service