Cron Expression Builder
Build cron expressions visually for Unix, Quartz, AWS EventBridge, and GitHub Actions. Preview upcoming run times instantly in your browser.
0 9 * * * Preview uses your current browser timezone.
Next runs
Next runs
This schedule never runs — check the day and month combination (e.g. Feb 30).
You just tested your Cron Expression Builder — Try Structured Data Converter next →
What Is a Cron Expression Builder?
Cron started as a Unix daemon in Version 7 Unix (1979) and the modern Vixie cron (used in Linux distros, BSD, macOS) standardised the five-field grammar: minute, hour, day-of-month, month, day-of-week. Quartz Scheduler (Java ecosystem) added a seconds field at the front (six total) and a year field at the back (seven max), changed day-of-week to 1-7 instead of 0-6, and added L (last), W (weekday), # (nth weekday) modifiers absent from Unix cron. AWS EventBridge uses a six-field schedule (similar to Quartz but the day-of-week and day-of-month must be ? if the other is set), and GitHub Actions uses POSIX five-field. The builder lets you pick the target dialect and translates between them. Common syntax: * (any value), 5 (literal), 1-5 (range), 1,3,5 (list), */15 (step from base), 0,15,30,45 (explicit list equivalent). The classic gotcha is 0 */6 * * * — readers assume every 6 hours starting now but it means at minute 0 of hours divisible by 6 i.e. 00:00, 06:00, 12:00, 18:00 in the current calendar day. Restart your service at 03:00 and the next run is 06:00, not 09:00.
How to Use the Cron Expression Builder
Pick the target dialect (Unix crontab, Quartz, AWS EventBridge, GitHub Actions). The builder shows the five (or six / seven) fields with Every or Specific toggles. Toggle Every minute / hour / day for * semantics or pick a value for literal. Use the step input for */N (e.g., every 15 minutes = */15 * * * *). Day-of-month vs day-of-week are mutually exclusive in some dialects — selecting both is OR in Unix cron but invalid in Quartz / EventBridge (one must be ?). The live preview shows the next 5 scheduled runs computed in your browser timezone (cron itself runs in the server's timezone; mismatched timezones are a top failure mode — your local 9 AM might be 3 AM UTC where the server runs). Copy the expression and paste into your crontab, .github/workflows/*.yml, EventBridge rule, or Quartz JobDetail. The expression is also linkable — the URL hash captures the full configuration.
Why Correct Cron Scheduling Matters
0 */6 * * * does not mean every 6 hours. */6 in the hour field means every hour whose number is divisible by 6 — that's 00, 06, 12, 18, exactly 4 runs per calendar day. A reboot at 03:00 does not shift the schedule; the next run is 06:00. To actually run every 6 hours from now, use a stateful scheduler (Quartz cron triggers, systemd timers with OnUnitActiveSec=6h, or your CI's own interval syntax) — cron itself is purely calendar-based and stateless. The other classic miss is February 30 — 30 14 30 * * runs only in months with day 30, silently skipping February (and giving 11 runs per year instead of 12). Tools that auto-correct or pre-compute the next 5-10 runs catch both gotchas before they ship. AWS recommends EventBridge's rate expressions (rate(6 hours)) for stateful interval scheduling rather than cron.
Frequently Asked Questions
What formats does this support?
This builder outputs Unix 5-field cron plus Quartz, AWS EventBridge, and GitHub Actions variants for the same schedule.
Are preview times generated locally?
Yes. TeaFun calculates the upcoming run times in your browser using the options you selected.
Can I use this for GitHub Actions workflows?
Yes. Switch the format to GitHub Actions and copy the generated expression into your workflow schedule.
Use this tool inside a bigger workflow
These collections group follow-up tools and guides that commonly belong in the same job.
Browse same tags
Jump to other tools that share the same workflow, format, or use case.