Cron Expression Translator
See what a cron expression means and when it runs next, in any time zone.
Runs in your browser. Your input is not sent anywhere.
How to use it
- Type or paste the expression, for example */15 * * * * or cron(0 18 ? * MON-FRI *).
- Choose the dialect of the scheduler that will run it. The same text can mean different things in different schedulers.
- Choose the time zone the scheduler uses. Unix cron uses the zone of the server or of CRON_TZ; EventBridge rules use UTC.
- Read the sentence, the next ten run times and the table of fields. An invalid expression is marked at the exact characters.
Worked example: two dialects, two meanings
The Unix expression 0 0 1,15 * 5 restricts both day fields. Classic cron then runs the job when either matches, so it runs at midnight on the 1st and the 15th and on every Friday; in October 2026 that is October 1, 2, 9, 15, 16, 23 and 30. The tool says so under the description.
In Quartz the same idea needs a question mark in one of the day fields, and the day of week counts from 1 for Sunday. The expression 0 15 10 ? * 6L means 10:15:00 on the last Friday of every month:
Fri 2026-10-30 10:15:00+00:00
Fri 2026-11-27 10:15:00+00:00
Fri 2026-12-25 10:15:00+00:00October 31, 2026 is a Saturday, so the last Friday of October is the 30th.
Common expressions (Unix crontab)
| Expression | Runs |
|---|---|
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes: 00, 05, 10 … 55 |
| */15 * * * * | Every 15 minutes |
| 0 * * * * | At the start of every hour |
| 0 */2 * * * | Every 2 hours, at minute 0 |
| 0 0 * * * | Every day at midnight (same as @daily) |
| 30 8 * * 1-5 | At 08:30 Monday to Friday |
| 0 9 * * 1 | Every Monday at 09:00 |
| 0 0 1 * * | At midnight on the first day of every month |
| 0 0 1 1 * | At midnight on January 1 (same as @yearly) |
Steps count from the start of the field, not from when the job was installed: */7 in the minute field runs at 0, 7, 14 … 56 and then again at 0, so the last gap of each hour is 4 minutes.
Dialects and their rules
| Unix crontab | Spring (6 fields) | Quartz | AWS EventBridge | |
|---|---|---|---|---|
| Fields | minute hour day month weekday | second first, then the Unix five | second … weekday, optional year | minute … weekday, then year |
| Day of week | 0-7, 0 and 7 are Sunday | 0-7, 0 and 7 are Sunday | 1-7, 1 is Sunday | 1-7, 1 is Sunday |
| Both day fields set | Either may match (OR) | Both must match | Not allowed: one must be ? | Not allowed: one must be ? |
| L, W, # | No | Yes | Yes | Yes |
| Years | No field | No field | 1970-2099 | 1970-2199 |
| Shortcuts | @hourly, @daily, @weekly, @monthly, @yearly | The same | None | None |
L in the day-of-month field is the last day of the month, L-3 three days before the last day (the 28th in a 31-day month), 15W the weekday nearest the 15th without leaving the month, and LW the last weekday. In the day-of-week field, with Quartz and EventBridge numbering, 6L is the last Friday and 2#1 the first Monday; in Spring, which counts from 0 for Sunday, they are the last Saturday and the first Tuesday. L alone means Saturday in Quartz and EventBridge. EventBridge documents L but not L-3, so the tool refuses L-3 there.
Unix cron accepts a step only after * or a range, so 5/10 is an error there; Quartz and Spring read it as “every 10 starting at 5”. In Quartz a range may wrap around, such as 20-2 for the hours from 20:00 to 02:59; the EventBridge documentation uses the same 20-2 in an example.
Time zones and clock changes
Run times are calculated on the local clock of the chosen zone with the time zone data of your browser. When clocks go forward, a time such as 02:30 does not exist that night; when they go back, 01:30 occurs twice.
The tool follows the rule that Amazon EventBridge Scheduler documents: a run at a time that does not exist is skipped and listed as skipped, and a time that occurs twice runs once, at its first occurrence. This is a convention, and schedulers differ: cronie runs fixed-time jobs from a skipped hour immediately after the change and runs jobs that repeat more often than hourly normally, and the Quartz documentation only warns that such times can be skipped or repeated. Avoid the hours around 02:00 local time for daily jobs, or schedule in UTC.
Common mistakes
- Pasting a Quartz or Spring expression into crontab: the first field is then read as minutes and the whole schedule shifts.
- Numbering weekdays the Unix way in Quartz or EventBridge, where 1 is Sunday and 2 is Monday.
- Setting both day fields in Unix cron and expecting both to apply. 0 0 13 * 5 runs on every 13th and every Friday, not only on Friday the 13th.
- Forgetting that EventBridge rules run in UTC, or that a server’s cron uses the server’s time zone rather than yours.
- Expecting */90 in the minute field to mean every 90 minutes; a step never crosses its field.
Sources
Frequently asked questions
- How do I run a cron job every 5 minutes?
- Use */5 * * * * in crontab. It runs at minute 0, 5, 10 and so on of every hour. In Quartz and Spring add the seconds field in front: 0 */5 * * * ? or 0 */5 * * * *. In EventBridge use cron(0/5 * * * ? *) or the rate expression rate(5 minutes).
- What does the question mark mean in a cron expression?
- In Quartz, Spring and EventBridge, ? means “no specific value” and is allowed only in the day-of-month and day-of-week fields. Quartz and EventBridge require it in exactly one of them, because they cannot combine a day of month with a day of week.
- Why does my crontab job run on more days than expected?
- If both the day-of-month and the day-of-week field are restricted, classic cron runs the job when either matches. To run only on Friday the 13th, schedule it on the 13th and test the weekday in the command, for example with [ "$(date +\%u)" = 5 ]; the backslash is needed because % is special in a crontab line.
- Which time zone does cron use?
- Unix cron uses the time zone of the server, or the one set with CRON_TZ in cronie. EventBridge rules always use UTC; EventBridge Scheduler lets you choose a zone. Choose the same zone here to see the real run times.
- Is my expression sent anywhere?
- No. The expression is parsed and the run times are calculated in your browser; nothing is sent. If this page shows ads, the ad script runs in the same page, but the tool never passes your input to it.
Last updated: October 5, 2026