cv.cm

知識 · 日期與時間

UTC 與時區如何運作

閱讀約 5 分鐘

簡答

UTC(世界協調時間)是所有民用時區定義所依據的參考時鐘。時區是使用相同當地時間的區域,以與 UTC 的時差表示,例如 -05:00 或 +05:30,並附帶日光節約時間何時開始、何時結束的規則。時差範圍從 -12:00 到 +14:00,有些還不是整數小時。

開啟時區轉換

UTC 是什麼

UTC 由國際度量衡局(BIPM)根據全球數百座原子鐘計算而來。它以國際單位制的秒計時,與國際原子時(TAI)相同,但偶爾會加入閏秒調整,讓它與地球自轉的差距保持在 0.9 秒以內。自 2017 年起,UTC 比 TAI 慢 37 秒。

UTC 不實施日光節約時間,也不會隨季節改變。正因為如此穩定,伺服器、記錄檔、航空器和資料庫都以它為準。

UTC 與 GMT 的差別

日常使用中,GMT 和 UTC 顯示的時間相同,但兩者並不是同一件事:

UTCGMT
本質以原子鐘為基礎的時間標準歷史上是格林威治的天文時間;如今是一個時區名稱
時差依定義就是零點UTC+00:00
日光節約時間永遠沒有GMT 本身沒有,但英國夏季會從 GMT 改用 BST(UTC+01:00)
在軟體中的用法標準參考大多只當作標籤;建議使用 UTC

實務上的陷阱:「倫敦時間」只有在冬季才等於 GMT。從 3 月最後一個星期日到 10 月最後一個星期日,倫敦比 UTC 快一小時。

時差不等於時區

+01:00 這樣的時差描述的是某一個時刻。時區描述的則是一個地方隨時間的變化:它的時差、日光節約時間規則,以及這些規則的所有歷史變動。Linux、macOS、Android、Java 和各大瀏覽器所使用的 IANA 時區資料庫,以地區和城市命名時區,例如 Europe/London、America/New_York 和 Asia/Kolkata。

處理任何未來或過去的時間時,Europe/London 都比 +00:00 好,因為它知道 1 月的時差是 +00:00、7 月是 +01:00。以 +00:00 儲存的定期會議,一年中有半年會差一小時。

  • 過去的時刻以 UTC(或 Unix 時間戳記)儲存。
  • 未來的在地活動以當地時間加上 IANA 時區名稱儲存,需要時再算出 UTC 時刻,因為政府可能在短時間內修改日光節約時間規則。
  • 避免使用 CST 或 IST 這類縮寫:CST 可能是美國中部標準時間(UTC-6)或中國標準時間(UTC+8),IST 則同時用於印度、愛爾蘭和以色列。

日光節約時間

日光節約時間(DST)會在一年中的部分期間把時鐘調快,通常是一小時。各地區的日期不同:美國在 3 月第二個星期日調快、11 月第一個星期日調回;歐盟則在 3 月和 10 月的最後一個星期日切換,各地都在 01:00 UTC 進行。亞洲和非洲多數國家不實施日光節約時間,包括中國、日本和印度。在南半球,日光節約時間大約從 10 月實施到 4 月。

每次切換都會產生兩種邊界情況:

  • 空缺:時鐘調快時,在從 02:00 直接跳到 03:00 的時區,當天的 02:30 等當地時間根本不存在。
  • 重疊:時鐘調回時,01:30 這樣的時段會出現兩次,所以只有當地時間而沒有時差,就無法判斷是哪一次。

特殊時差

並非每個時區與 UTC 都相差整數小時。以下都是目前仍在使用的時差:

時差時區範例地區
-12:00Etc/GMT+12無人居住的貝克島與豪蘭島;最晚的時差
-03:30America/St_Johns加拿大紐芬蘭(標準時間)
+05:30Asia/Kolkata印度與斯里蘭卡
+05:45Asia/Kathmandu尼泊爾
+09:30Australia/Darwin澳洲北領地
+12:45Pacific/Chatham紐西蘭查塔姆群島(標準時間)
+14:00Pacific/Kiritimati吉里巴斯萊恩群島;全球最早進入新一天的地方

由於時差橫跨 26 小時,同一個日曆日期在地球上某處存在的時間最長可達約 50 小時。「14 日當天結束前」必須指明時區才有精確意義。

常見問題

UTC 和 GMT 一樣嗎?

兩者顯示的時鐘時間相同,但 UTC 是原子時間標準,GMT 是時區。英國只在冬季使用 GMT,夏季改用 BST(UTC+01:00)。

UTC 會因日光節約時間而改變嗎?

不會。UTC 全年不變;只有各地時區會在日光節約時間開始或結束時,調整與 UTC 的時差。

印度為什麼使用 UTC+05:30?

印度只用一個時區,以東經 82.5° 的子午線為中心,與格林威治相差五個半小時。採用半小時或十五分鐘的時差,是為了更貼近一個國家的經度。

Etc/GMT+12 的正負號是什麼意思?

在 IANA 的 Etc/GMT 名稱中,為了相容 POSIX,正負號是相反的,所以 Etc/GMT+12 其實是 UTC-12:00。實際地點請優先使用 Asia/Tokyo 這類以城市命名的名稱。

所有知識文章