About this studio
Pikkola, tool No. 16
A cron line is short enough to look obvious and terse enough to be wrong for a month before anyone notices.
The expression is not the whole story
Five fields say when, but they do not say in which clock, and they do not say what the server will do with them. The same line means different hours in Seoul, Frankfurt and São Paulo, and a line with a day of month and a day of week both set means something different in Vixie cron than in Quartz.
So this page does three things at once: it writes the sentence, it fills a table of what each field actually says, and it runs the schedule forward against a real calendar.
How the simulation works
The page walks the calendar from today, month by month and day by day, and stops at the first ten matches. Days are tested against the month field, then the day fields, then the allowed hours, minutes and seconds are read in order. The result is a list of real dates, not an estimate.
Everything runs on the browser's own time zone data, so daylight saving is whatever the machine believes this year. On the night the clocks go back, a run inside the repeated hour appears once. On the night they go forward, a run inside the skipped hour is skipped. Check the first run after a change if the job matters.
What it will not do
It will not guess a time zone for your server. The expression has no time zone in it, and neither does this page. The UTC tab shows the same instant in UTC, and the platform notes say what each service does by default.
It will not pretend that every dialect is the same. The reader follows the crontab rule for the two day fields, and says so when both are set. Quartz wants a question mark in one of them, and the field table shows the question mark as no value rather than as any value.
It will not schedule anything. There is no account, no job runner and no queue behind this page; it writes the line and you paste it where the work lives.
The platform output
Six cards are built from the same expression. Linux keeps the five fields. GitHub Actions keeps five and reads them as UTC. EventBridge needs six fields, a question mark in one day field and 0/n instead of */n. Kubernetes keeps five and reads the cluster time zone unless you set spec.timeZone. node-cron keeps five and uses the server's local time. Celery gets the same numbers as named arguments.
Each card is a starting point, not a finished deployment. The note under it says the part that most often goes wrong.
If something is wrong
Write to hello@pikkola.com with the expression and the time you expected. A line and a date are enough to reproduce almost anything.