Developer Tools

Cron Expression Builder

Build cron expressions visually. Plain-English description, common presets, copy-paste ready.

Built cron expression
* * * * *
In English: every minute, every hour
Minute
Range: 059
*
Hour
Range: 023
*
Day of month
Range: 131
*
Month
Range: 112
*
Day of week
Range: 06
*

Cron syntax basics

A cron expression is five space-separated fields: minute, hour, day-of-month, month, day-of-week. Each field has a numeric range and supports wildcards, specific values, steps, and ranges.

  • Minute: 0–59
  • Hour: 0–23 (24-hour format)
  • Day of month: 1–31
  • Month: 1–12 (or names: JAN-DEC)
  • Day of week: 0–6 (Sunday = 0; or names: SUN-SAT). Some implementations also accept 7 for Sunday.

Special characters: * , - / and ?

  • * (asterisk) — match any value. * * * * * = every minute.
  • , (comma) — list of specific values. 0,15,30,45 * * * * = every 15 minutes.
  • - (hyphen) — range. 0 9-17 * * 1-5 = every hour 9 AM-5 PM, Monday-Friday.
  • / (slash) — step. */5 * * * * = every 5 minutes. Starts from 0 by default.
  • ? (question mark) — Quartz/Spring only — “no specific value,” used to disambiguate when both day-of-month and day-of-week are set.

Common cron patterns

  • * * * * * — every minute
  • */5 * * * * — every 5 minutes
  • 0 * * * * — top of every hour
  • 0 9 * * * — 9 AM every day
  • 0 0 * * 0 — midnight every Sunday
  • 0 9 * * 1-5 — 9 AM weekdays
  • 0 0 1 * * — midnight on the 1st of every month
  • 0 0 1 1 * — midnight on January 1st (annual)
  • 30 14 * * 6 — 2:30 PM every Saturday

Cron gotchas

The day-of-month / day-of-week trap

In standard Linux cron, if BOTH day-of-month AND day-of-week are specified (not *), the job runs when EITHER matches. So 0 0 13 * 5 runs at midnight on the 13th of every month AND every Friday — not just on Friday the 13th. To run only on Friday the 13th, you need scripting (use one specific check inside the job).

Time zones

Linux cron uses local time zone (set via TZ env or system default). AWS CloudWatch and GitHub Actions use UTC. Always verify which time zone your scheduler expects. DST transitions can cause jobs to run twice or be skipped — schedule outside the 1-3 AM window when possible.

Step starting points

*/30 in the minute field means “0 and 30,” not “every 30 minutes from when I save.” To start at minute 5: 5,35 instead of */30.

Linux vs cloud cron formats

  • Linux/Unix cron: 5 fields, local time zone.
  • AWS CloudWatch / EventBridge: 6 fields (adds year), UTC, slightly different syntax (no ? issue).
  • GitHub Actions: 5 fields, UTC. Minimum interval 5 minutes (technically supports 1 min but unreliable).
  • Vercel cron: 5 fields, UTC. Hobby tier limited to daily; pro/enterprise unlimited.
  • Quartz (Java/Spring): 6 or 7 fields (seconds + optional year). Uses ? for unspecified.
  • Kubernetes CronJob: 5 fields, time zone configurable per job (Kubernetes 1.25+).

When NOT to use cron

  • Sub-minute schedules: cron's minimum is 1 minute. For seconds, use a queue worker or a scheduler designed for it.
  • Complex dependencies: if Job B depends on Job A finishing, use a workflow tool (Airflow, Prefect, GitHub Actions) instead of timed cron.
  • Event-driven needs: if it should run when X happens, use a queue or webhook, not cron polling.
  • Long-running jobs: cron jobs that take longer than the interval can stack. Add lock files or use a job runner that handles this.
  • High-availability: vanilla cron runs on one machine. For HA, use a distributed scheduler.

For other developer tools: Regex Tester for pattern matching, JWT Decoder, and UUID Generator.

Frequently Asked Questions

What does a cron expression look like?
Five fields separated by spaces: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), day-of-week (0-6, where 0 = Sunday). Example: `0 9 * * 1-5` = at 9 AM every weekday. Each field accepts wildcards (*), specific values (5 or 0,15,30), steps (*/5), or ranges (1-5).
What does "*/5" mean in cron?
Every 5 — applied to a specific field. `*/5 * * * *` means every 5 minutes. `0 */2 * * *` means every 2 hours at minute 0. The step pattern starts at 0 by default for that field.
How do day-of-month and day-of-week interact?
In standard cron (most Linux), if BOTH are set to specific values, they're OR'd — runs when EITHER matches. If one is `*`, only the other is used. This is the most-confused cron behavior. Quartz scheduler uses ? to disambiguate; Linux cron doesn't support ?.
Does cron support seconds?
Standard 5-field cron does not. 6-field cron (used by Quartz, Spring, some other schedulers) adds seconds as the first field. Linux/Unix cron, GitHub Actions, Vercel cron, and most cloud schedulers use 5-field. For sub-minute scheduling, use a queue or scheduler designed for it.
What time zone does cron use?
Linux cron uses the system's local time zone. AWS CloudWatch uses UTC. GitHub Actions uses UTC. Always check the docs and convert your local schedule to the relevant time zone. Daylight saving time can cause skipped or duplicate runs in cron jobs.

Related Calculators