n8n's Schedule Trigger node uses the timezone specified by `GENERIC_TIMEZONE` when evaluating cron expressions.
n8n's Schedule Trigger node uses the timezone specified by GENERIC_TIMEZONE when evaluating cron expressions. If this variable is not set, it defaults to UTC. A workflow configured to run "every weekday at 9:00 AM" will fire at 9:00 UTC, not 9:00 in your local timezone. This is the most common source of "my scheduled workflow fires at the wrong time" issues.
Real-world example: Your business operates in US Eastern time. You want the Schedule Trigger's "9:00 AM Monday-Friday" to mean 9:00 AM ET, adjusting automatically for daylight saving time.
services:
n8n:
image: n8nio/n8n:1.94.1
environment:
GENERIC_TIMEZONE: America/New_York
TZ: America/New_York
```text
> **Note: Both Variables Matter**
>
> `GENERIC_TIMEZONE` controls n8n's internal timezone for cron expressions and display. `TZ` controls the operating system timezone inside the container, which affects Node.js `Date` objects and any Code nodes that use `new Date()`. Set both to the same value for consistent behavior.
```text title="Common Timezone Values"
America/New_York US Eastern
America/Chicago US Central
America/Denver US Mountain
America/Los_Angeles US Pacific
Europe/London UK
Europe/Berlin Central Europe
Asia/Tokyo Japan
Asia/Shanghai China
Australia/Sydney Australia Eastern
```text
Setting the timezone correctly eliminates an entire class of scheduling bugs and makes the Schedule Trigger node's behavior match your team's expectations.
**Related:** [Set a Unique Encryption Key and Back It Up](../security-best-practices/01-set-a-unique-encryption-key-and-back-it-up.md) | [Configure Payload Size and Binary Data Mode for Large Files](../performance-and-large-files/01-configure-payload-size-and-binary-data-mode-for-large-files.md)
I build production n8n and Cloudflare automation for teams — the same engineering behind HarperFlow. Fixed-price, escrow-protected, US-based.