Europe/Berlin

Europe/Berlin covers Berlin, Hamburg, Munich and the rest of Germany, at +01:00 standard time, switching to +02:00 in summer.

Loading tool…

Worked examples

  • A winter instant in Europe/Berlin

    Europe/Berlin's UTC offset and DST status on a January date, converted to UTC.

  • A summer instant in Europe/Berlin

    Europe/Berlin's UTC offset and DST status on a July date, converted to UTC — compare against the winter example to see any DST shift.

  • Converting Europe/Berlin to America/New_York

    A worked conversion from Europe/Berlin to America/New_York for a specific instant.

TZ identifier and aliases

Europe/Berlin is the canonical identifier for German civil time. It has no deprecated backward-compatibility alias in the tz database, but several other genuinely distinct IANA zones — Europe/Copenhagen, Europe/Oslo, Europe/Stockholm, Europe/Busingen (a small German exclave inside Switzerland) and Svalbard's Arctic/Longyearbyen — currently share identical rules and are folded into the same entry. These aren't aliases of Berlin; they're separate countries' own zones that happen to run on the same clock right now.

UTC offset and DST rule

Europe/Berlin is +01:00 (CET) on standard time and +02:00 (CEST) during daylight saving, following the EU-harmonized rule: the last Sunday in March through the last Sunday in October, both at 1am UTC — March 29 and October 25 in 2026.

Using it in cron, CI and Postgres

Set TZ=Europe/Berlin for a process that should schedule by German local time. Postgres accepts it via SET TIME ZONE 'Europe/Berlin'; or the timezone setting, applying the DST rule correctly for any date. Where a scheduler supports a CRON_TZ=Europe/Berlin line, jobs run by local time directly; GitHub Actions' schedule: trigger always evaluates in UTC with no per-job timezone, so a job meant to fire at a fixed Berlin hour needs its UTC equivalent recalculated across each DST boundary. Avoid the 2:00–3:00am local window for anything that must run exactly once — it's skipped on the March transition and repeated on the October one.

History and quirks

Germany adopted Central European Time in 1893, and — aside from the WWII-era occupation period, when much of Nazi-controlled Europe was forced onto Berlin's own clock regardless of local solar time — has used it ever since. West and East Germany's reunification in 1990 required no time zone reconciliation, since both states had remained on the same CET/CEST rule throughout the Cold War despite their political split. Germany's DST schedule became the effective template for the EU-wide harmonization directive adopted in the 1990s, which is why Europe/Berlin's transition dates are now identical to Paris, Rome, Madrid, Amsterdam and Warsaw. The zone's offset also underpins one of the more counterintuitive facts in European geography: Germany spans roughly the same longitude range as the UK and Spain, yet all three keep different clocks relative to true solar time — Spain, in particular, runs on Berlin's clock despite sitting almost directly south of London, a legacy of Franco-era alignment with Nazi Germany that Spain never reversed.

Offsets and DST transitions on this page are computed from the IANA time zone database bundled with your browser; the rules described above were verified against tzdata 2026b when this page was published.

Frequently asked questions

Does Europe/Berlin observe DST?
Yes. In the current rule it begins the last Sunday in March and ends the last Sunday in October.
What is the UTC offset of Europe/Berlin in winter/summer?
Europe/Berlin is +01:00 on standard time and +02:00 during daylight saving time.
Which cities use Europe/Berlin?
Berlin, Hamburg, Munich, Köln all use the Europe/Berlin zone — also commonly known as Central European Time — along with the rest of Germany.
What is the deprecated alias for this zone?
Europe/Berlin has no widely-used deprecated alias, though Europe/Busingen is a separate IANA identifier that currently shares identical rules.