Time zones in scheduling apps without the “is that UTC?” thread

Every remote team has a story about a meeting that happened twice or not at all because someone used PST while daylight saving flipped. Time zones are political data, not math homework.

Instants vs wall time

Store UTC instants (epoch milliseconds or ISO 8601 with `Z`) in your database. Render wall time with the user’s IANA zone (`America/Chicago`, not `CST`). Abbreviations are ambiguous; offsets alone break across DST.

All-day events (birthdays, holidays) may be date-only without a single instant — model them separately from timed meetings. Converting “April 1 all day” across zones needs calendar rules, not a single offset.

Server `TZ=UTC` is good practice, but the client must still format for the attendee. Never trust `new Date()` string parsing without an explicit zone.

DST and edge cases

Spring forward creates impossible local times; fall back creates duplicates. Scheduling libraries must pick a policy (strict, lenient, shift) and document it.

Users in `Asia/Kolkata` do not observe DST; users in `Europe/Berlin` do. Hard-coding `-5` breaks twice yearly in much of North America.

The Time Zone Converter on DroidXP uses browser `Intl` APIs: pick source zone, enter date/time, see offsets and formatted outputs for multiple targets. Handy when planning release windows with global beta testers.

Product UX that helps

Show both parties’ local times in confirmation emails. Include the zone name, not just GMT offset, because offsets change.

Default new events to the creator’s zone but let invitees view in theirs. Calendar deep links should carry the instant, not a ambiguous string.

For support tooling, a quick converter tab beats asking “what time is it where you are?” in every ticket.

Testing checklist

Unit-test around DST boundaries for your top five zones. Include Southern Hemisphere zones if you ship globally — their DST dates differ from US/EU assumptions.

Simulate device zone changes (travel) — mobile OS updates location silently.

Log the IANA ID used for display, not only offset, when debugging “wrong hour” reports.