illari

Cron expression converter

Paste a cron expression. See it translated into systemd, AWS EventBridge, Kubernetes, and GCP Cloud Scheduler syntax, with the real gaps between them flagged instead of silently guessed.

At 09:00 AM, Monday through Friday

systemd timer

Goes in the .timer unit's [Timer] section.

example.timer
[Timer]
OnCalendar=Mon..Fri *-*-* 09:00:00

AWS EventBridge Scheduler

The year field has no cron equivalent, so it's always *.

schedule expression
cron(0 9 ? * 2-6 *)

Kubernetes CronJob

Same syntax as standard cron. Set the timezone with spec.timeZone, not by changing the expression.

cronjob.yaml
spec:
  schedule: "0 9 * * 1-5"
  timeZone: "UTC"

GCP Cloud Scheduler

Same syntax as standard cron. Timezone is a separate parameter, not part of the expression.

gcloud
gcloud scheduler jobs create ... \
  --schedule="0 9 * * 1-5" \
  --time-zone="UTC"

“Cron syntax” is a family of dialects

Kubernetes and GCP Cloud Scheduler both take standard unix-cron directly, no translation needed, timezone set separately from the expression. systemd and AWS EventBridge use their own formats entirely: systemd's calendar event syntax spells out weekday names and a year field, and AWS's cron() expression adds a seconds-free but year-full sixth field and a ? wildcard cron doesn't have.

The one gap this converter won't silently paper over: standard cron lets day-of-month and day-of-week both be restricted at once, meaning either one matches. That's the day-of-month / day-of-week trap, and neither AWS nor a single systemd line can express it. AWS has no equivalent at all; systemd gets there with two OnCalendar= lines in the same timer, since it fires on either match.

Converter FAQ

Is Kubernetes CronJob syntax different from standard cron?
No. spec.schedule takes the same 5-field syntax and the same @daily-style macros. Timezone is a separate spec.timeZone field, not part of the expression.
Is GCP Cloud Scheduler syntax different from standard cron?
No, it's unix-cron, same as Kubernetes and plain crontab. Timezone is set separately when you create the job, not encoded in the expression.
Why does AWS EventBridge need a ? in the day fields?
AWS's cron() forbids a * in both the day-of-month and day-of-week fields at once — exactly one has to be ?, meaning "don't care." Standard cron allows both to be restricted at the same time, which means either one matches; AWS has no equivalent for that combination.
Can I convert the other direction, systemd or AWS syntax back to cron?
Not yet, this tool goes cron to the others. Cron is the format most jobs start in, so that's the direction that matters most.

Need to see next run times instead of another scheduler's syntax? The cron expression tester previews the next dozen runs in any timezone, with daylight-saving changes flagged.