時區資料庫(Time Zone Database/tzdb)出乎意料的俏皮與人味
https://muddy.jprs.me/links/2026-03-06-the-surprising-whimsy-of-the-time-zone-database/時區是軟體工程裡最容易把人逼瘋的一塊:文章引用 Computerphile 影片的經典吐槽,意思是別自己寫時區邏輯,直接感謝前人把一團亂麻做成開源、拿來用就好。作者因為加拿大卑詩省 (British Columbia) 近期決定改採永久日光節約時間 (DST, Daylight Saving Time,常稱夏令時間),好奇這種政策變動是否已被納入 IANA (Internet Assigned Numbers Authority,網際網路號碼指派局) 的時區資料庫 tzdb (Time Zone Database)。他發現現在 tzdb 已可在 GitHub 上用提交紀錄 (commit) 追蹤更新,相關變更也確實出現在儲存庫的公告檔裡。
作者接著分享自己翻閱 tzdb 的感想:這個被大量軟體直接或間接仰賴的關鍵資料庫,註解不只記錄「現在」各地時區規則,還花很大篇幅整理各國時區沿革與細節,例如英國二戰期間曾採行「雙倍夏令時間」(double summer time) 之類的歷史。更有趣的是,這些註解裡帶著意外的幽默感與人味:像是 1947 年加拿大作家 Robertson Davies 對 DST 的辛辣吐槽、1950 年代納許維爾公共鐘面「保守派與自由派各看各的時間」、1883 年紐約在標準時區上路那天出現「一天兩次中午」的混亂,以及為了釐清北極圈小鎮 Resolute Bay 歷史時區而寫得像偵探故事的考證。作者的結論是:時區本身近乎瘋狂,但記錄它的資料庫反而因為這些註記而顯得很「人類」。
討論串裡有人不太買單這種「可愛」,認為 tzdb 在命名與結構上不夠「講理」,尤其不滿
US/Pacific 這類官方用名被丟進所謂的
backward 檔案;他主張應淘汰這種集中式資料庫,改用 DNS (Domain Name System,網域名稱系統) 做一個
.timezone 頂層網域 (TLD, Top-Level Domain),讓各國用 TXT 記錄發布時區資訊,甚至可用 Punycode (將 Unicode 網域名稱轉為 ASCII 的編碼) 直接提供國際化名稱。反方則指出,這前提假設「每個地點都有唯一且被多數承認、也願意負責的政府機關」並不成立;tzdb 的任務也不只是抄寫政府公告,而是盡可能描述「某地某時人們實際把時間當成什麼」,包含重疊管轄、政治飛地、歷史政權更替與不同社群的用法。更重要的是,若把責任交給各國政府,可靠性與一致性很難保證,反而可能造成碎片化,甚至讓某些政府以法律強制本國 IT 必須使用其版本,變成新的控制工具;相較之下,現有維護者雖是民間,但實際上仍受使用者與產業「用不用它」所制衡。
不少留言也把卑詩省案例拿來當作 tzdb 為何棘手的示範:維護者 Paul Eggert 的註解提到,法律文字導致「只換一次時鐘、但隔 21 小時要換兩次名稱」的怪狀況,而「Pacific Time」直覺縮寫
PT 又不符合 POSIX (Portable Operating System Interface,一套類 Unix 作業系統標準) 對時區縮寫需 3–6 個字元的限制;他向卑詩省政府詢問也沒得到回覆,只好先做暫時性變通,假裝新法在稍後日期生效,以繞過 CLDR (Unicode Common Locale Data Repository,Unicode 通用語言環境資料庫) v48.1 在顯示名稱上的限制,確保 UTC (Coordinated Universal Time,世界協調時間) 偏移量正確、介面文字也不至於顯示成「Pacific Standard Time」,待 CLDR 修正後再移除。其他留言則補充 tzdb 的價值常在「過去式」:不只看現在幾點,還要能正確解讀歷史時間戳、換算跨區間的實際時長(例如回推過去的航班起降時間),並分享更多時區混亂趣聞與研究案例;也有人提醒討論中曾把卑詩省「改成永久 DST」與「改回永久標準時間」方向說反,但整體共識仍是:時區從規則到命名都充滿現實妥協,tzdb 才會同時像法典又像田野筆記。
https://news.ycombinator.com/item?id=47290198