Timezone Conversion:
UTC, DST & Best Practices
Timezone bugs break twice a year at DST transitions and silently corrupt data year-round. Learn UTC storage, IANA identifiers, and how to convert times correctly across every timezone.
Timezones Are a Human Problem, Not a Technical One
Computers store time as a number — seconds since an epoch. The Unix epoch is January 1, 1970, 00:00:00 UTC. That's one number, one timeline, no ambiguity. But humans live in roughly 40 timezones spread across UTC-12 to UTC+14, with irregular boundaries that follow political borders rather than longitude lines, and with daylight saving time rules that change by country and sometimes by year. Converting between this clean machine representation and the messy reality humans experience is what timezone converters do.
A timezone converter takes a date and time in one timezone and shows you what that moment is in another. "9:00 AM New York" becomes "2:00 PM London" and "11:00 PM Tokyo." The math is straightforward — add or subtract the UTC offset — but the rules for determining the correct offset for a given date and location are complex. DST transitions, historical timezone changes (countries change their timezone rules more often than you'd expect), and the fact that some timezones use half-hour and quarter-hour offsets (India is UTC+5:30, Nepal is UTC+5:45). A converter that uses the IANA timezone database handles all of this correctly. Simple offset arithmetic does not.
UTC: The Anchor of All Time
Every timezone is defined as an offset from UTC. UTC+8 means 8 hours ahead. UTC-5 means 5 hours behind. UTC itself never changes — no DST, no seasonal adjustments. This is why storing all timestamps in UTC and converting to local timezones only for display is the universally recommended practice. A timestamp stored as 2025-01-15T14:30:00Z (the Z indicates UTC) is unambiguous. A timestamp stored as 2025-01-15T09:30:00 without a timezone could be Eastern (UTC-5), Central (UTC-6), or anything else — and when DST changes, the same local time maps to different UTC times in spring and fall, creating an hour of ambiguity. For databases and APIs: always use UTC. For user interfaces: always show local time. Use our Timestamp Converter for Unix timestamp conversions alongside timezone work.
Daylight Saving Time: The Source of Most Timezone Bugs
DST isn't one rule — it's hundreds of rules. The United States springs forward on the second Sunday in March and falls back on the first Sunday in November. Europe springs forward on the last Sunday in March and falls back on the last Sunday in October. Australia goes the opposite direction (southern hemisphere — summer is December-February). Countries near the equator generally don't observe DST at all. Some countries have abolished DST (Russia in 2014, Turkey in 2016). Some countries observe it only in certain regions (Australia's Queensland doesn't; Western Australia does). And countries occasionally change their rules — the US extended DST by four weeks in 2007.
Testing timezone logic at DST boundaries catches bugs that don't surface at any other time. The "spring forward" gap: 2:30 AM on the spring transition day doesn't exist — clocks jump from 1:59 AM to 3:00 AM. If your code tries to schedule something at 2:30 AM that day, what happens? The "fall back" overlap: 1:30 AM occurs twice on the fall transition day — once in daylight time, once in standard time. If your code logs an event at 1:30 AM, which 1:30 AM does it mean? These edge cases produce real bugs in production that only appear twice a year and are notoriously hard to reproduce in development.
Use our timezone converter with specific dates to verify your timezone logic. Convert 2:30 AM on March 10, 2025 from US Eastern to UTC — the converter correctly handles the DST gap. Convert 1:30 AM on November 3, 2025 — it correctly handles the overlap. If your application's behavior doesn't match the converter's output, you have a timezone bug.
IANA Timezone Identifiers: The Only Names You Should Use
Always use IANA timezone identifiers (like America/New_York, Europe/Paris, Asia/Tokyo), never three-letter abbreviations (EST, PST, GMT). The abbreviation "EST" could mean Eastern Standard Time (UTC-5, US) or Australian Eastern Standard Time (UTC+10). "CST" could mean Central Standard Time (UTC-6, US), China Standard Time (UTC+8), or Cuba Standard Time (UTC-5). Even "GMT" is ambiguous — it could mean UTC+0 year-round (the UK in winter) or UTC+0 with BST in summer (the UK overall).
IANA identifiers use the format Region/City. The city is the most populous city in each timezone — New York represents the entire US Eastern zone, Los Angeles represents Pacific, London represents UK time. The identifiers are maintained in the tz database (also called zoneinfo or Olson database), which is updated several times a year as countries change their timezone rules. Most programming languages and operating systems include a copy of this database. For web applications, the browser's Intl.DateTimeFormat API uses the OS's tz database. For server-side code, ensure your tz database is kept current — an out-of-date database produces wrong conversions for dates after a rule change.
Scheduling Across Timezones
When you schedule a meeting, you think in local time: "Tuesday at 2 PM." When you code a scheduled event, you store it in UTC: "Tuesday at 2 PM Eastern" becomes a UTC timestamp. When you display it to a participant in Tokyo, you convert that UTC timestamp to Asia/Tokyo. When DST changes in one country but not the other, the UTC timestamp stays correct and the local display adjusts automatically. This is why Google Calendar, Outlook, and every modern scheduling system uses this pattern: input in local time → convert to UTC for storage → convert to viewer's local time for display. Simple in concept, but the implementation details — recurring events across DST boundaries, all-day events that are date-based not time-based, events scheduled before a timezone rule change takes effect — keep calendar developers employed full-time.