程式設計和世界時間

2021-08-28 18:40:39 字數 1965 閱讀 2077

英文位址

所有需要在**中處理多個時區的人都會考慮如何處理時區。但是很多人並沒有完全理解時區的運作原理,這篇文章將詳細介紹這個問題。

因為地球在以24小時左右一圈的速度進行公轉,緯度不同的地方中午的時間不同(注:這裡的中午是指太陽在當地上空正中間的那個時刻)。如果我們希望每個地方的中午統一為12:00,那麼不同地區的時鐘設定必然不同。如果我們希望中午的時間誤差在1分鐘內,那麼我們需要設定1440個時區。

如果我們不進行遠距離旅行或者溝通,那麼上述方法完全沒有問題。這也確實是19世紀時的情況。但是當鐵路、即時通訊技術出現後這種情況就被打破。

為了解決這個問題,人類創立了「時區」這個概念。但是我們只設定了24個時區而不是1440個。主時區gmt,各向東西方向延伸7.5度,那麼我們總共有24個時區,每個時區延伸15度。但是不少國家和領地往往自行決定他們屬於哪個時區,因此導致了下圖這種情況:

儘管如此,目前看來時間計算也並沒有那麼複雜,因為我們只要根據不同地區設定不同時區即可。但其實還有其他因素需要考慮。

gmt是英國格林威治太陽時間。它是英國冬令時時間,但是他們在夏令時使用bst(british summer time)。utc並乙個是時區而是國際時間標準。utc盡量靠近gmt時間,而其他時區通過偏移量來表示。

夏令時是指在夏天將時間後撥乙個小時來節省能源(是否可以產生效果目前具有很大爭議)。目前北美和西歐仍然使用dst,但是大部分亞洲國家、俄羅斯並未使用。

夏令時導致我們無法只通過地理位置判斷時間,而必須考慮夏令時是否生效。在夏令時開始和結束的那兩天問題會變得更加複雜:開始那天時間只有23小時,而結束那天時間達到25小時。

我們來下09:00 utc時間時位於"america/denver」時區的本地時間變化情況。在將要進入09:00utc時間時當地時間將變成02:00,但是夏令時生效後,當地時間直接變成了03:00.

當秋天到來時問題會更加複雜。在接近08:00 utc時 當地時間接近2:00,然後當夏令時取消時,當地時間「回退」到1:00導致1:00和2:00之間的時間發生了兩次!

更糟糕的事我們沒有乙個明確的規則知道夏令時什麼時候開始和結束。一直到2023年,美國、西歐和加拿大都採用同樣的夏令時變化方式。但是2023年美國國會為了懷俄明州的孩子有更長的白天享受萬聖節而延長了夏令時時間。從此之後,每年西歐和北美都有3-4個星期的時間差值不同。更不要說歐盟統一在1:00 utc「回退」時間,而不是在不同時區的同一時間。

現實情況比上述更糟糕,比如雖然美國實行夏令制,但仍有很多州未使用。而印度部分行省使用**時間,其他地區使用東部時間。也不是所有地區的當時時間和utc的差值都以小時為單位,有些地區的時間比utc快1.5小時或者2.5小時,甚至有45分鐘的情況。

通常我們需要考慮如下因素:

尤其在使用夏令制的地區,如果我們只儲存本地時間將因為上述「回退」導致時間混亂,也無法將這個時間轉換為utc或者其他時區的時間。

通常來講最好的方式是將本地時間轉換為utc時間並儲存,然後可以轉換為任意時區的時間並展示。這種方法也可以同時處理夏令時的問題。

目前的程式語言基本都支援時間轉換,所以在轉換時我們不用擔心上面這些問題。但是如果有人認為只要儲存了本地時間和本地時間相對utc的偏移量就足夠了,那麼這絕對是錯誤的看法。

大多數資料庫都支援datetime資料型別,其中有些內建了時區轉換,在使用這些資料庫前需要詳細了解他們如何處理時區。

web程式需要考慮的更多,但是有一點可以明確:我們可以使用js指令碼獲取當前使用者所在時區並回傳給伺服器。但是有時候最好允許使用者自行選擇時區而不是使用當前時區,這和我們需要處理的資料也有關係:有些資料和某一特定時區緊密關聯,而有些資料需要轉換為使用者的當地時區顯示。

MTK 世界時鐘

如何新增乙個自定義的 世界時間 地區,如越南 胡志明市?找到 resource world clock city.c 中與專案對應的陣列 const timezonestruct timezonedata 在其中新增世界時間的一項 位置無要求,程式會根據時區重新排序的 其中 時區可以上網查,比如北京...

協調世界時 UTC

utc是協調世界時 universal time coordinated 的英文縮寫,是由國際無線電諮詢委員會規定和推薦,並由國際時間局 bih 負責保持的以秒為基礎的時間標度。utc相當於本初子午線 即經度0 上的平均太陽時,過去曾用格林威治平均時 gmt 來表示。那麼utc與世界各地的時間應如何...

協調世界時 UTC

協調世界時 utc 又稱世界標準時間或世界協調時間,簡稱utc 從英文 coordinated universal time 法文 temps universel cordonn 而來 是最主要的世界時間標準,其以原子時秒長為基礎,在時刻上盡量接近於格林尼治平時。中國大陸採用iso 8601 200...