Cron Translator

Build, translate, and preview cron schedules. See the next runs in your timezone.

How to Use
  1. Type a cron expression directly, or use the visual field editors below
  2. Use a preset button for common schedules
  3. Read the plain-English translation to verify your schedule
  4. Check the "Next 10 runs" to confirm timing

Format: minute hour day-of-month month day-of-week (standard 5-field cron)

Note: All processing happens locally in your browser.

* * * * *
0-59, */n, list
0-23, */n, list
1-31, */n, list
1-12, JAN-DEC
0-6 (SUN=0)
Every minute

Next 10 Runs

What a cron translator does

Cron expressions are compact, but the syntax is cryptic enough that even people who write them daily double-check before saving. 0 */6 * * 1-5 runs every 6 hours on weekdays, but it takes a moment of staring to confirm that. This tool translates cron expressions in both directions. Paste an expression to read it in plain English, or build one visually using the field editors and preset buttons above.

It also previews the next 10 runs in your local timezone. That is the fastest way to catch the two most common cron mistakes: a daily job that is actually running at UTC midnight instead of yours, and a "weekly on Monday" rule that quietly fires twice because day-of-month and day-of-week are both set.

How a cron expression is structured

Standard cron uses five space-separated fields, read left to right.

┌──────────── minute       (0-59)
│ ┌────────── hour         (0-23)
│ │ ┌──────── day of month (1-31)
│ │ │ ┌────── month        (1-12, JAN-DEC)
│ │ │ │ ┌──── day of week  (0-6, SUN=0)
│ │ │ │ │
* * * * *

Each field accepts five kinds of value. A specific number like 5 means exactly 5. A wildcard * means "every value". A list such as 1,3,5 fires on each item. A range like 1-5 means 1 through 5 inclusive. A step like */15 means every 15 units starting from the lowest value of the field, so */15 in the minute field fires at :00, :15, :30, and :45.

Some cron implementations also accept shorthand like @hourly, @daily, @weekly, @monthly, and @yearly. This tool translates standard five-field Unix cron. If you are working with six-field Quartz or Spring cron, the leftmost field is seconds and the dialect differs enough that you will want a parser built specifically for those.

Common cron patterns

These cover most of what you will actually write in the wild. Each one works in standard Unix cron, Linux crontab, and scheduler services like GitHub Actions, AWS EventBridge, and Kubernetes CronJobs.

Expression What it does
* * * * *Every minute
*/5 * * * *Every 5 minutes
*/15 * * * *Every 15 minutes
0 * * * *Every hour on the hour
0 */2 * * *Every 2 hours
0 0 * * *Once a day at midnight
0 9 * * *Every day at 9 AM
0 9 * * 1-5Every weekday at 9 AM
30 9 * * 1Every Monday at 9:30 AM
0 0 1 * *First day of every month, midnight
0 0 * * 0Every Sunday at midnight
0 0 1 1 *Once a year, January 1st at midnight
*/10 9-17 * * 1-5Every 10 minutes during business hours, weekdays only

Cron gotchas that trip everyone up

Day-of-month and day-of-week are combined with OR, not AND

If you write 0 0 15 * 1 expecting "midnight on the 15th, but only if it is a Monday", cron will actually fire on every 15th and every Monday. The two day fields are unioned, not intersected. The workaround is to use one field or the other, not both, unless the union behavior is what you want.

Every cron service has its own default timezone

A schedule like 0 9 * * * means 9 AM in whatever timezone the scheduler uses, which is not always what you would expect. Classic Linux crontab uses the server's local timezone. GitHub Actions always runs in UTC. AWS EventBridge rules default to UTC but support overrides. Always check. If you need 9 AM in a specific zone regardless of where the server lives, most modern schedulers accept a prefix like CRON_TZ=America/New_York 0 9 * * *.

Step values do not always behave the way you expect

*/15 in the minute field is intuitive: it fires at :00, :15, :30, and :45. But */15 in the hour field only fires at hour 0 and hour 15, because hour 30 does not exist. Steps reset at the start of each parent cycle. If you want something like "every 15 hours" across a longer window, cron cannot express it directly.

There is no sub-minute precision in standard cron

If you see * * * * * * with six fields, or a leading seconds value like 0/30, you are looking at Quartz or Spring cron, not Unix cron. Standard Unix cron runs on a one-minute heartbeat at the earliest. For anything finer, you need a different scheduler or a long-running process that sleeps between executions.

Frequently asked questions

Is this cron translator free to use?

Yes. No signup, no ads, no usage limits. The tool runs entirely in your browser.

Does it support Quartz or Spring cron (6 fields with seconds)?

Not yet. This tool handles standard five-field Unix cron, which covers Linux crontab, GitHub Actions, AWS EventBridge, Kubernetes CronJobs, and most scheduler services. If you need Quartz or Spring cron parsing, you'll need a dialect-specific parser.

How does the cron translator handle timezones?

The "next runs" preview converts each scheduled time into whatever timezone you pick from the dropdown, so you can sanity-check when your job will actually fire. The cron expression itself is timezone-agnostic; the scheduler that runs it is what decides the real firing time.

Can I use the cron translator offline?

Yes. The whole tool runs in your browser with no API calls. Once the page is loaded, you can disconnect and it will keep working.

Why are the day-of-week values 0-6 and not 1-7?

Unix cron historically uses 0 for Sunday, running through 6 for Saturday. Some implementations also accept 7 as Sunday for compatibility. This tool uses 0-6 with Sunday as 0, matching the POSIX-style convention. You can also use three-letter names like SUN, MON, TUE, and so on.

How accurate is the "next 10 runs" preview?

It is calculated from the expression using the same rules a real cron daemon uses, so the times shown match what Unix cron would produce. The only caveat is timezone: the preview uses the zone you pick in the dropdown, and the real scheduler may use a different one unless you configure it explicitly.

Privacy

This tool runs entirely in your browser. No data is sent to any server.