Free tool Cron expression generator and explainer
Cron expressions are short and easy to get wrong. Type one, or start from a common schedule, and the tool spells it out in plain words, breaks it down field by field and lists the next times it will run, in the time zone your server actually uses.
- 5 or 6 fields
- Next runs in any zone
- Runs locally
Build or check a cron schedule
Start from one of the buttons or type your own expression. The description, the field breakdown and the next run times update as you type.
Five fields: minute, hour, day of month, month, day of week. Six fields put seconds first (Spring, Quartz). Macros such as @daily also work.
Next runs are calculated in this zone, including daylight-saving changes. Pick the zone your server or scheduler runs in.
In plain words
At 09:30, on Monday through Friday
2026-11-12 09:30:00 Thu
2026-11-13 09:30:00 Fri
2026-11-16 09:30:00 Mon
2026-11-17 09:30:00 Tue
2026-11-18 09:30:00 WedIn the selected time zone, with the weekday. Times that daylight saving skips are left out.
minute 30 30
hour 9 9
day of month * *
month * *
day of week 1-5 1,2,3,4,5Each field as written, and the values it expands to.
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/cron-expression-generator
Version v1.0Updated Update history
What each output tells you
Read the description first, then check it against the run times. If the two disagree with what you meant, the expression is wrong.
In plain words
A sentence built from the fields, such as “At 09:30, on Monday through Friday”. It names times and days exactly as the scheduler will match them.
Next run times
The real dates and times after now, in the selected zone. This is where surprises show: a job you expected daily that runs every minute, or a monthly job that never fires in February.
Field by field
Each field as you wrote it next to the values it expands to. */15 becomes 0, 15, 30, 45; MON-FRI becomes 1–5. A * means every value.
Notes
A six-field expression, a field outside its range, or syntax the tool does not handle is flagged above the results, with the field named.
Cron runs in the time zone of the machine or service that executes it. GitHub Actions schedules, for example, run in UTC by default.
From idea to crontab line
Four steps, and the last one is the one people skip.
-
1
Start from a schedule
Click the closest button, such as “Weekdays at 09:30”, or paste the expression you want to check.
-
2
Edit the fields
Change minutes, hours or days. The description updates as you type, so you can see each change take effect.
-
3
Set the time zone
Choose the zone of the server or scheduler. A job at 09:00 on a UTC server runs at 17:00 in Beijing.
-
4
Check the run times
Read the next runs before you deploy. If one looks wrong, fix the expression here, then copy it into crontab or your scheduler.
Five fields, read left to right
Standard crontab has five fields separated by spaces. Spring and Quartz add a seconds field in front. Each field accepts a value, a list, a range or a step.
*every value ·,list (1,15) ·-range (9-17) ·/step (*/15,0/5,10-50/20)?means “no specific value” (Quartz) and is treated like*- Macros:
@yearly,@monthly,@weekly,@daily,@hourly - When both day of month and day of week are restricted, the job runs when either matches
- Not supported:
L,W,#and a specific year in a seventh field
| Field | Allowed values | Example |
|---|---|---|
| Second (6-field only) | 0–59 | 0 = at the top of the minute |
| Minute | 0–59 | */5 = every 5 minutes |
| Hour | 0–23 | 9-17 = 09:00 to 17:59 |
| Day of month | 1–31 | 1,15 = the 1st and 15th |
| Month | 1–12 or JAN–DEC | JAN,JUL = January and July |
| Day of week | 0–7 (0 and 7 = Sunday) or SUN–SAT | 1-5 = Monday to Friday |
Common schedules, explained
Descriptions as the tool prints them. The last two rows show the traps: a day-of-month plus weekday that means “or”, and a six-field expression.
| Expression | In plain words | Typical use |
|---|---|---|
*/5 * * * * | Every 5 minutes | Health checks, queue polling |
0 * * * * | At minute 0 of every hour | Hourly aggregation |
0 2 * * * | At 02:00 | Nightly backup, outside working hours |
30 9 * * 1-5 | At 09:30, on Monday through Friday | Morning report on working days |
*/15 9-17 * * 1-5 | Every 15 minutes between 09:00 and 17:59, on Monday through Friday | Syncs during office hours |
0 0 1 * 1 | At 00:00, on day 1 of the month or on Monday | Probably a mistake: runs every Monday as well as on the 1st |
0 0/5 9-17 * * ? | Every 5 minutes between 09:00 and 17:59 | Spring @Scheduled or Quartz, seconds first |
To run only on a Monday that is also the 1st, leave one day field as * and check the other condition in the job itself.
Where cron schedules go wrong
The syntax is small. The mistakes are about what the scheduler assumes.
Wrong time zone
Most servers and containers run in UTC. A job written for 09:00 local time fires hours early or late. Check the server zone, or use a scheduler setting such as CRON_TZ where it exists.
A star in the minute field
* 9 * * * runs every minute from 09:00 to 09:59, sixty times. For once at 09:00, write 0 9 * * *.
Day of month and weekday together
0 0 13 * 5 runs on every 13th and on every Friday, not only on Friday the 13th. Restrict one day field and leave the other as *.
Mixing crontab and Quartz
A six-field Quartz expression pasted into crontab fails, and the reverse shifts every field by one. Quartz also numbers weekdays from 1 = Sunday; names like MON avoid the confusion.
Schedules you do not have to write
Plenty of cron jobs exist to email a weekly CSV or to check whether a number dropped overnight. TapCub does both from the dashboard, and backend jobs can report what they did as events.
Alerts
Rules on any metric: drop, spike, threshold or anomaly, sent to email, WeCom, DingTalk, Feishu or a webhook.
Learn moreGoals with projections
Monthly or quarterly goals on any metric, with an alert when the projection falls below target.
Learn moreEvents from backend jobs
Payments, refunds or any scheduled job can send a named event through the server API.
Learn moreCron expression questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
What is a cron expression?
A one-line schedule made of fields separated by spaces: minute, hour, day of month, month and day of week. The Unix cron daemon reads it from a crontab file, and many schedulers (Kubernetes CronJobs, GitHub Actions, Spring, Quartz) use the same idea.
What does */5 mean in cron?
A step: every fifth value of the field, starting at its lowest value. In the minute field */5 is 0, 5, 10 … 55. 10-50/20 is 10, 30, 50.
What is the difference between 5-field and 6-field cron?
Standard crontab has five fields and its smallest unit is a minute. Spring and Quartz put a seconds field first, so 0 30 9 * * * is 09:30:00. Quartz also allows a seventh year field and numbers weekdays from 1 = Sunday, while crontab and Spring use 0 or 7 for Sunday.
Which time zone does cron use?
The time zone of the machine or service running it. On most servers and containers that is UTC. Some cron implementations accept a CRON_TZ variable, Kubernetes CronJobs have a timeZone field, and GitHub Actions schedules run in UTC by default.
How do I run a job every 30 seconds?
Standard crontab cannot go below a minute. In Spring or Quartz use a seconds field: */30 * * * * *. With plain crontab, a common workaround is two entries, one of them starting with sleep 30.
What happens if I set both day of month and day of week?
By crontab convention the job runs when either field matches. 0 0 1 * 1 runs on the 1st and on every Monday. Quartz asks you to put ? in one of the two to avoid this.
Does the tool support L, W and #?
No. These Quartz extensions (last day, nearest weekday, nth weekday of the month) are reported as unsupported. Neither is a specific year in a seventh field, and neither is @reboot, which is not a time.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Replace the report cron job
Set goals and alerts once in TapCub, and the numbers you used to email by script arrive on their own.