Time Zones Are Weird: A Developer-Friendly Tour of Earth's 438+ Local Times
Exploring the fascinating complexity of global time zones, from fractional offsets to daylight saving chaos, and how to handle them in software
Exploring the fascinating complexity of global time zones, from fractional offsets to daylight saving chaos, and how to handle them in software
Last updated August 1 2025
Swift's TimeZone.knownTimeZoneIdentifiers returns 438 values. That's about eighteen times what those "24 time zones around the globe" classroom posters promised. I pulled this together for a talk and kept finding weirder examples. Civil time is mostly politics with a UTC offset.
Click below to load the embedded presentation.
| Category | Count | Examples |
|---|---|---|
| Whole-hour offsets | 27 | New York (UTC-5), Tokyo (UTC+9) |
| Half-hour offsets | 9 | India (UTC+5:30), Newfoundland (UTC-3:30) |
| Quarter-hour offsets | 3 | Nepal (UTC+5:45), Chatham Islands (UTC+12:45) |
| Daylight-Saving variants* | 284 (ish) | U.S., Europe, parts of Australia |
*If you treat each DST switch as a "new" zone, the number balloons. The IANA database, which macOS / iOS rely on, currently tracks ~438 distinct identifiers to cover historical and political quirks.
For a full list of fractional zones, TimeandDate.com maintains a handy table.
For a current map, see TimeandDate's DST atlas.
Until 2006, some counties observed DST and others didn't. Some ran on Eastern Time, others on Central. TV guides were a nightmare. Today the state is mostly Eastern, but a dozen counties near Chicago & Evansville still run on Central.
With no "sunrise" cues, research stations pick whatever time suits flight logistics. The U.S. Amundsen-Scott South Pole Station follows New Zealand time (UTC+12 / +13) because that's where supply planes originate.
Spans five geographical zones but uses a single civil time: Beijing Time (UTC+8). In Xinjiang, many locals run an unofficial UTC+6 "Xinjiang Time" for daily life, so a 9 AM appointment might be 11 AM Beijing Time.
In 1995 Kiribati shifted its eastern islands from UTC-10 to UTC+14, dragging the date line eastward so the whole country shares one calendar day. Result: Kiribati is first to ring in the New Year each January 1. Read the backstory.
| Issue | Why it bites | What to do |
|---|---|---|
| Ambiguous times | 2025-11-02 01:30 happens twice in New York when clocks fall back. | Store timestamps in UTC. Use local time only for display. |
| "Non-existent" times | 2025-03-09 02:30 never exists in L.A.: clocks jump to 03:00. | Let date-parsing APIs throw errors. Never build your own parser. |
| Political changes | Russia killed DST in 2014. Turkey adopted permanent DST in 2016. | Ship the latest IANA tzdata with each app update. |
| Hard-coded abbreviations | "EST" is ambiguous (Eastern Standard vs. Australian Eastern Standard). | Prefer numeric offsets (UTC−05:00), or use localized long names from the OS. |
| Assuming 24 zones | Scheduling across India (+5:30) or Nepal (+5:45) breaks. | Treat offsets as arbitrary HH:mm in your database schema. |
Apple's guide NSDate and Calendars is the reference I keep coming back to.
Offsets change when parliaments change their minds. That's the whole game.
Use the IANA time-zone database or your platform's APIs. Store UTC, display local. Allow non-integer offsets and DST transitions anywhere you schedule anything. I learned most of this after a bug where a meeting invite showed up an hour early for half the attendees. Once was enough.
The world runs on a patchwork stitched together by history, geography, and the occasional airline route. Your job is to not pretend it's simpler than that.
Have another favorite time-zone oddity? Drop it in the comments. Just don't call it Greenwich Mean Time in July 😉