Gigi Tools
生產力

時區換算完整指南:UTC、GMT 與全球時區一次搞懂

深入解說時區的歷史由來、UTC 與 GMT 的差別、夏令時間的運作方式,以及程式開發中的時區處理技巧。

什麼是時區?

時區(Time Zone)是地球上使用相同標準時間的區域。時區的概念源自 19 世紀鐵路運輸的需求。 歷史由來: 在 19 世紀中期之前,每個城鎮都使用自己的「太陽時」(solar time),也就是根據太陽在正南方時定為正午。這在馬車時代不是問題,但鐵路的出現讓不同城鎮的時間差異變成了大麻煩 —— 火車時刻表混亂不堪,甚至造成事故。 1884 年,國際子午線會議在美國華盛頓召開,決議以通過英國格林威治天文台(Greenwich Observatory)的經線為本初子午線(Prime Meridian),並以此為基準建立 24 個標準時區。 每個時區跨越 15 度經度(360° ÷ 24 = 15°),相鄰時區相差 1 小時。但實際上,時區邊界往往沿著國界或行政區界,不是嚴格的經線。 有趣的時區冷知識: • 中國橫跨 5 個時區的寬度,但全國統一使用 UTC+8 • 印度使用 UTC+5:30,是少數使用半小時偏移的國家 • 尼泊爾使用 UTC+5:45,是唯一使用 45 分鐘偏移的國家 • 基里巴斯有 UTC+14 的時區,是全世界最早進入新一天的地方

UTC 和 GMT 的差別

UTC 和 GMT 在日常生活中常被混用,但它們在技術層面有重要差異: GMT(Greenwich Mean Time,格林威治標準時間): • 基於天文觀測:以太陽通過格林威治子午線的時間來定義 • 歷史悠久,自 1884 年國際子午線會議以來使用 • 由於地球自轉速度不均勻,GMT 的精確度會有微小波動 UTC(Coordinated Universal Time,協調世界時): • 基於原子鐘:使用全球約 400 台原子鐘的加權平均值 • 自 1972 年起成為國際標準 • 精確度極高:原子鐘每年誤差小於 1 微秒 • 透過「閏秒」(Leap Second)與地球自轉保持同步 關鍵技術差異: • GMT 是一個「時區」,UTC 是一個「時間標準」 • UTC 不會因為夏令時間而改變 • UTC 的數值與 GMT 在大多數情況下相同(差異在 1 秒以內) • 在精確計時、科學研究和程式開發中,應使用 UTC 為什麼縮寫是 UTC 而不是 CUT? 因為英文是 Coordinated Universal Time(CUT),法文是 Temps Universel Coordonné(TUC),為了國際統一,最終妥協使用了 UTC。

夏令時間 DST

夏令時間(Daylight Saving Time,DST)是在夏季將時鐘撥快一小時,以充分利用日照的制度。 運作方式: • 春季開始:將時鐘撥快 1 小時(例如 2:00 AM 直接跳到 3:00 AM) • 秋季結束:將時鐘撥回 1 小時(例如 2:00 AM 回到 1:00 AM) • 口訣:Spring Forward, Fall Back 目前使用 DST 的國家/地區: • 美國(除亞利桑那州和夏威夷州外):3 月第二個週日 ~ 11 月第一個週日 • 歐盟:3 月最後一個週日 ~ 10 月最後一個週日(但正在討論廢除) • 澳洲(部分州):10 月第一個週日 ~ 4 月第一個週日(南半球相反) 不使用 DST 的國家/地區: • 台灣、日本、韓國、中國、新加坡 • 大多數赤道附近的國家(日照時間全年穩定) 常見混淆: • 美國東部時間:EST = UTC-5(冬季)、EDT = UTC-4(夏季) • ET(Eastern Time)是統稱,會自動切換 EST/EDT • 台灣全年都是 CST(UTC+8),不需要考慮 DST 夏令時間的爭議: 近年越來越多研究指出 DST 的弊大於利:增加心臟病發作風險、打亂生理時鐘、實際節能效果有限。歐盟已通過決議計劃廢除 DST。

程式開發中的時區處理

時區處理是軟體開發中最容易出錯的領域之一。以下是最佳實踐和常見陷阱: 黃金法則:儲存用 UTC,顯示用本地時間。 1. 後端 / 資料庫: • 所有時間戳一律儲存為 UTC • 資料庫欄位使用 TIMESTAMP WITH TIME ZONE 型態 • API 回傳 ISO 8601 格式:2024-01-15T08:30:00Z(Z 表示 UTC) 2. 前端 / 顯示層: • 從 UTC 轉換為使用者的本地時區 • JavaScript:new Date().toLocaleString('zh-TW', {timeZone: 'Asia/Taipei'}') • 使用 IANA 時區資料庫的名稱(如 'Asia/Taipei'),不要用固定偏移量 3. 常見 Bug: • 使用固定偏移量(UTC+8)而非時區名稱 → DST 國家會出錯 • 伺服器和客戶端時區假設不同 → 時間顯示錯誤 • 忽略閏秒 → 在極端精確度需求下可能出問題 • 字串比較日期 → "2024-01-09" > "2024-01-10" 字串比較結果錯誤 4. 推薦的程式庫: • JavaScript:date-fns-tz、Luxon(Moment.js 已不建議使用) • Python:pytz、dateutil • Java:java.time(ZonedDateTime) 記住:時區規則會改變(政府可能修改 DST 規則),所以永遠保持 IANA 時區資料庫更新。

使用 Gigi Tools 的時區換算工具

Gigi Tools 提供便利的時區相關工具: 時區換算工具: • 快速在不同時區之間轉換時間 • 支援全球所有主要時區 • 自動處理夏令時間(DST) • 可以一次比較多個時區的時間 Unix 時間戳轉換器: • 將 Unix 時間戳(Epoch Time)轉為可讀的日期時間 • 也可以將日期時間轉為 Unix 時間戳 • 支援毫秒和秒兩種格式 • 開發者調試 API 時的必備工具 常見使用情境: • 與國際客戶或同事安排會議時間 • 開發者調試時間相關的 Bug • 換算不同時區的活動、直播時間 • 確認國際航班的起降時間 所有計算在瀏覽器中進行,您的資料不會被上傳到伺服器。

相關工具推薦