Time Zones#

Reference of time-zone identifiers, UTC offsets, and the operator-relevant gotchas: DST transitions, leap seconds, and the difference between fixed-offset (POSIX) and rule-based (IANA / tz database) zones.

The IANA time-zone database (tzdata) is the authoritative source; zone1970.tab lists every zone. Operating systems, languages, and databases all wrap it.

Common zones#

IANA name

Offset

Notes

UTC

+00:00

Coordinated Universal Time; reference.

Etc/GMT

+00:00

Etc zones use the opposite sign of common offsets: Etc/GMT-5 = UTC+5.

GMT

+00:00

Greenwich Mean Time; civil time without DST.

Europe/London

+00:00 / +0

1 BST in summer.

Europe/Dublin

+00:00 / +0

1 IST in summer (note: Irish Standard Time, the summer offset, opposite of others).

Europe/Lisbon

+00:00 / +0

1 WEST in summer.

Atlantic/Azores

-01:00 / +0

0:00

Atlantic/Cape_Verde

-01:00

no DST.

Europe/Berlin

+01:00 / +0

2 CET / CEST.

Europe/Paris

+01:00 / +0

2

Europe/Madrid

+01:00 / +0

2

Europe/Rome

+01:00 / +0

2

Europe/Amsterdam

+01:00 / +0

2

Europe/Stockholm

+01:00 / +0

2

Europe/Helsinki

+02:00 / +0

3 EET / EEST.

Europe/Athens

+02:00 / +0

3

Europe/Bucharest

+02:00 / +0

3

Europe/Kyiv

+02:00 / +0

3

Europe/Istanbul

+03:00

Türkiye; no DST since 2016.

Europe/Moscow

+03:00

no DST since 2014.

Africa/Cairo

+02:00 / +0

3 DST reintroduced 2023.

Africa/Lagos

+01:00

no DST.

Africa/Johannesburg

+02:00

no DST.

Africa/Nairobi

+03:00

-

Asia/Dubai

+04:00

no DST.

Asia/Tehran

+03:30 / +0

4:30 DST removed 2022.

Asia/Kabul

+04:30

-

Asia/Karachi

+05:00

-

Asia/Tashkent

+05:00

-

Asia/Kolkata

+05:30

no DST; was Asia/Calcutta.

Asia/Kathmandu

+05:45

45-min offset.

Asia/Yangon

+06:30

-

Asia/Bangkok

+07:00

-

Asia/Jakarta

+07:00

-

Asia/Singapore

+08:00

no DST.

Asia/Hong_Kong

+08:00

-

Asia/Shanghai

+08:00

single zone for all of mainland China.

Asia/Taipei

+08:00

-

Asia/Manila

+08:00

-

Asia/Tokyo

+09:00

-

Asia/Seoul

+09:00

-

Asia/Pyongyang

+09:00

-

Australia/Perth

+08:00

-

Australia/Adelaide

+09:30 / +1

0:30 DST.

Australia/Sydney

+10:00 / +1

1

Australia/Brisbane

+10:00

no DST.

Pacific/Auckland

+12:00 / +1

3 DST.

Pacific/Chatham

+12:45 / +1

3:45 unusual 45-min offset.

Pacific/Honolulu

-10:00

Hawaii; no DST.

America/Anchorage

-09:00 / -0

8

America/Los_Angeles

-08:00 / -0

7 PST / PDT.

America/Vancouver

-08:00 / -0

7

America/Denver

-07:00 / -0

6

America/Phoenix

-07:00

no DST (Arizona).

America/Chicago

-06:00 / -0

5 CST / CDT.

America/New_York

-05:00 / -0

4 EST / EDT.

America/Toronto

-05:00 / -0

4

America/Halifax

-04:00 / -0

3

America/St_Johns

-03:30 / -0

2:30 30-min offset.

America/Sao_Paulo

-03:00

no DST since 2019.

America/Buenos_Aire

s -03:00

no DST.

America/Mexico_City

-06:00 / -0

5 DST removed 2022.

Pacific/Pago_Pago

-11:00

American Samoa.

Pacific/Apia

+13:00

Samoa; switched east-of-IDL to west in 2011.

Pacific/Kiritimati

+14:00

Kiribati; furthest east.

Etc / POSIX zones#

The Etc/ zones are sign-inverted from the common notation: Etc/GMT+5 is UTC-5 (the Americas), Etc/GMT-5 is UTC+5 (the East). This follows POSIX TZ-string convention, which defines positive offsets west of the meridian, and contradicts the ISO 8601 sign convention. Operationally this catches everyone at least once.

DST and DST-free#

Region

Notes

DST observed

North America (most), Europe (entire bloc), parts of South America, Australia (some states), New Zealand, Iran (until 2022), Israel, Palestine.

DST not observed

Most of Africa and Asia (incl. China, India, Japan, Korea, Singapore, Indonesia, Saudi Arabia, all GCC), Russia (since 2014), Türkiye (since 2016), Mexico (since 2022), Brazil (since 2019), Argentina, Iceland, Hawaii, Arizona (US), most equatorial countries.

EU “directive”

EU 2019 directive proposed ending DST changes; never implemented.

US Sunshine Protect

. Bill passed Senate 2022; never enacted.

Leap seconds#

Concept

Notes

TAI

International Atomic Time; monotonic.

UTC

Civil time; periodic leap-seconds keep within ±0.9 s of UT1.

TAI - UTC

37 seconds (since Jan 1, 2017).

GPS time

TAI - 19 s; offset from UTC = 18 s (since 2017).

Leap-second list

IERS Bulletin C; new leaps announced ~6 months ahead.

Smearing

Google / AWS / Facebook smear leap seconds across the day to avoid 23:59:60 timestamps.

Future

ITU-R 2022 vote: pause leap seconds by 2035.

Tooling#

Tool

Notes

date

POSIX; respects TZ env var.

tzdata / zoneinfo

/usr/share/zoneinfo on Linux / macOS.

timedatectl

systemd; query / set zone + NTP state.

tzselect

interactive zone picker (POSIX).

Python zoneinfo

stdlib since 3.9; reads tzdata.

Python pytz

legacy.

JS Intl.DateTimeFormat

browser-side.

JS date-fns-tz

/ Luxon / Day.js modern alternatives.

Java java.time

from JDK 8; reads tzdata.

Go time.LoadLocation

reads /usr/share/zoneinfo.

Postgres timestamptz

stored as UTC; returned in session zone.

MySQL CONVERT_TZ()

requires loaded mysql.time_zone tables.

Operator notes#

  • Always log in UTC; convert to local for presentation only.

  • timestamptz != timestamp, “with time zone” stores a point in time; “without time zone” stores wall-clock-naive.

  • DST transitions, 02:00 ambiguous in fall (occurs twice), non-existent in spring (skipped). Cron jobs at 02:30 daily run twice / not at all on the transition day; use UTC schedules.

  • TZ database revisions, shipped quarterly+; old tzdata produces incorrect conversions (recent: Mexico 2022, Iran 2022, Greenland 2024). Update your runtime + DB containers.

  • POSIX TZ vs IANA, POSIX strings (EST5EDT,M3.2.0,M11.1.0) ignore historical zone changes; prefer IANA names.

  • Leap-second smearing, pin every cluster to one smear policy; mixing causes second-level skew that breaks consensus protocols.

  • No “abbreviation” is unique, “CST” is China Std Time, Central Std Time (US), Cuba Std Time, Central Std Time (AU). Always use full IANA names in code and storage.

References#