0 15 * * * — What does this cron expression mean?
0 15 * * * is a daytime schedule. Cron has no AM/PM, so “3 PM” is written as hour 15, and 0 3 * * * would be 3 AM. Unlike the nightly 2 AM or 4 AM jobs, a 15:00 job runs while people are working, which is usually the point: a report people read before they leave, or a reminder that has to arrive in office hours.
0 15 * * *
Run the job once a day at exactly 15:00 (3:00 PM) in the scheduler's timezone.
Frequency: 1 run per day. cronstrue reads it as “At 15:00”.
Open 0 15 * * * in the Cron BuilderField-by-field breakdown
0
Minute
0–59
15
Hour
0–23
*
Day of month
1–31
*
Month
1–12
*
Day of week
0–6
- Minute0 — at minute 0.
- Hour15 — at hour 15, which is 3 PM on the 24-hour clock.
- Day of month* — every day of the month.
- Month* — every month.
- Day of week* — every day of the week, including weekends. Use 1-5 here for weekdays only.
Next run times
Example: if it is Monday, 5 Jan 2026, 09:07 UTC, the next runs of 0 15 * * * (UTC) are:
- #1Mon, 5 Jan 2026, 15:00 UTC
- #2Tue, 6 Jan 2026, 15:00 UTC
- #3Wed, 7 Jan 2026, 15:00 UTC
- #4Thu, 8 Jan 2026, 15:00 UTC
- #5Fri, 9 Jan 2026, 15:00 UTC
Live times from your current clock replace this example once the page loads. Cron uses the scheduler's timezone; most cloud servers, GitHub Actions and AWS EventBridge rules use UTC.
0 15 * * * in Quartz, AWS, GitHub Actions, Kubernetes and systemd
Crontab (Linux / macOS)
0 15 * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1Standard 5-field syntax used by Vixie cron, cronie, busybox crond and most libraries (node-cron, APScheduler, robfig/cron).
Quartz (6 and 7 fields)
0 0 15 * * ?
0 0 15 * * ? *
# Spring @Scheduled
@Scheduled(cron = "0 0 15 * * *")Weekdays only in Quartz: 0 0 15 ? * MON-FRI. Quartz needs ? in day-of-month when day-of-week is set.
AWS EventBridge
cron(0 15 * * ? *)15:00 UTC. Weekdays only: cron(0 15 ? * MON-FRI *). Note the ? moves to day-of-month when day-of-week is restricted.
GitHub Actions
on:
schedule:
# Every day at 3:00 PM, evaluated in UTC
- cron: '0 15 * * *'15:00 UTC is 11:00 in New York (EDT), 08:00 in San Francisco (PDT) and 16:00 or 17:00 in Berlin depending on DST, so one schedule falls inside working hours on both sides of the Atlantic.
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: every-day-at-3pm
spec:
schedule: "0 15 * * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
startingDeadlineSeconds: 900
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: alpine:3.20
command: ["/bin/sh", "-c", "echo running"]Daytime jobs usually compete with production traffic. Set resource requests and limits so the Job cannot starve user-facing Pods.
systemd timer
# /etc/systemd/system/myjob.timer
[Unit]
Description=Every day at 3:00 PM
[Timer]
OnCalendar=*-*-* 15:00:00
Persistent=true
[Install]
WantedBy=timers.targetWeekdays only: OnCalendar=Mon..Fri *-*-* 15:00:00.
When to use every day at 3:00 pm
- Daily status or sales summary sent before the end of the working day.
- Reminders for open tickets, pending approvals or unsubmitted timesheets.
- Midnight jobs for Japan or Korea when the server runs on UTC (15:00 UTC is 00:00 JST/KST).
- Afternoon cache warm-up before a predictable evening traffic peak.
Common pitfalls with 0 15 * * *
3 PM is hour 15, not 3
Cron uses a 24-hour clock. 0 3 * * * runs at 3 AM, twelve hours away from what you meant. Double-check by reading the next run times above before deploying.
0 3 * * * # 03:00, 3 AM
0 15 * * * # 15:00, 3 PM15:00 in which timezone?
On a UTC server, 0 15 * * * is midnight in Tokyo and Seoul, 11 AM in New York in summer (10 AM in winter) and 8 PM in Mumbai. If the job targets a specific office, set the scheduler's timezone (CRON_TZ, Kubernetes timeZone, Spring zone) instead of converting by hand.
Running during peak traffic
Unlike nightly jobs, a 15:00 job shares the database with real users. Batch heavy queries, use a read replica or lower the job's priority with nice/ionice so a report doesn't slow down checkout.
0 15 * * * nice -n 10 ionice -c3 /usr/local/bin/daily-report.shRelated cron expressions
Need a different schedule? Paste 0 15 * * * into the Cron Builder and edit it, browse all cron expressions, read the cron syntax guide or copy from the cron examples list.
Frequently Asked Questions
What does 0 15 * * * mean in cron?▾
Once a day at 15:00, which is 3:00 PM. The 0 is the minute and the 15 is the hour on a 24-hour clock; the other fields are * so it runs every day.
How do I run a cron job at 3 PM on weekdays only?▾
Use 0 15 * * 1-5 in crontab (or 0 15 * * MON-FRI). In AWS EventBridge it is cron(0 15 ? * MON-FRI *), and in Quartz 0 0 15 ? * MON-FRI.
What is 0 15 * * * in AWS EventBridge?▾
cron(0 15 * * ? *). EventBridge rules use UTC, so this is 15:00 UTC every day. If you need 3 PM in a local timezone, use EventBridge Scheduler and set its timezone.