The first field is the minute, the second is the hour, the third is the day of the month, the fourth is the month, and the fifth is the day of the week. So, to run at 2:30, you would use:
30 2 * * * commandThe minute field comes first — that's the gotcha for most people coming from natural-time formats like 02:30. Cron reads “minute, hour”, not “hour:minute”. So 2:30 AM is 30 2, not 2 30.
To run at 2:30 PM instead of AM, use 24-hour time: 30 14 * * *. Cron has no AM/PM concept — every hour value is 0-23. Want both 2:30 AM and 2:30 PM in one cron? Use a list in the hour field: 30 2,14 * * *.
Watch out for timezone surprises. The expression 30 2 * * * is evaluated in the timezone of whatever runs your scheduler — system time on a Linux host, UTC on AWS EventBridge / Vercel, the JVM timezone on Quartz, the value of TZ in the cron daemon environment, etc. If your jobs need to fire at 2:30 in a specific zone, set TZ explicitly in the crontab (TZ=America/New_York on a line above the entry) or convert to UTC and document the conversion.
Read the dedicated guide: Cron every day.
View future cron matches in a calendar
Showing next 1000 cron schedules
See this cron expression on the calendar → view example
Other answers and worked examples for the most confusing cron expressions.
Ready to schedule it?
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
Schedule
“every 5 minutes”
Next run
in 23s
Permalink: https://tool.crontap.com/help/running-a-cron-job-at-every-hour-and-minute-everyday