博客 / 詳情

返回

多時區的全天概念概述

背景

公司準備出海,有些產品就得考慮全球的應用場景了,比如説一箇中國人和一個美國人系統辦公的事情,首先地理跨度就比較大,中間的時差問題就非常明顯。

專業術語

標準時區:其實就是格林尼治時間,UTC時間。
本地時區:就是分處在各個地理位置上的時間,比如我們東八區,其實就是UTC 時間 +8為當地時間。
全天:一般意義上説的其實就是一整天,其實就是從0點到次日零點之間的時間段為通俗意義上的全天時間。
時差:其實就是不同時區之間的時間差值,比如説日本是東九區,我們是東八區,日本的時間就比我們早一個小時,在具體一點,在UTC時間為0點的時候,東八區的時間是8點,東九區的時間就是9點。

概念上的統一

如果大家都是同一個時區的,那麼就沒有統不統一的概念,因為大家本來就是一樣的,所以我們討論的場景僅僅是不同時區之間的場景。
我們其實天然的對時間不是很敏感,跟別人説一個時間的時候,如果跨了時區天然都是轉換困難的。

本地時間,這個其實不光是一個數字的問題,周圍的一切都會告訴你現在是幾點,早上七八點太陽要出來,12點太陽要升到最高的位置,傍晚五六點太陽又要落下去。更重要的當地的人跟你説時間的時候都説的是當地時間。

所以,當你瞭解一件事情的時候,都是以自己的時間(一般是當地時間)為準的,就是我需要明確的知道,在我的時間裏邊,他是幾點到幾點。
另外還有一件事情很重要,你需要跟你的小夥伴交流的,所以他的時間也需要尊重,但是,如果你們兩個還不在一個時區裏邊的話,再將原時間時間轉換他的時區,這個轉換就比較困難,所以一般跨時區討論問題的時候,一般會説原始時區的時間,舉個例子,你跟一個美國的同學要參加一個非洲同學的會議,那你跟美國同學確認的時候,就會説“那個非洲時間2點到3點的會議,你參不參加”。

具體要怎麼表現

圖片

這個是釘釘的表現,其實看上去就蠻正常的,符合我們之前概念上的統一里邊提到的,我的時間跟原始時間的概念。
這樣大家就可以一塊愉快的交流了。

全天概念歧義

全天這裏其實我們有分歧,有的人認為一天是一整天,有人認為一天是一個具體的時間段。

概念上的衝突

一天就是一整天

一天就是一天,他的時間維度是以天為最小維度的,所以他是一個點兒而並不是一個時間段。
你看,我們之間雖然有時差,但是大家都是17號有什麼問題,難道中國的17號跟美國的17號不是一個17號?
所以相對於存在一整天一類的概念上,其實我們標識為17號,然後説明他是一整天就完事了唄。
並且你看,雖然咱們之間有時差,但是真正有效的時間,其實就幾個小時,這幾個小時差得多的話,嗐大概率不重疊,那麼一天的概念,其實具有一定的普適性,並且UI界面表現也很直接,如果你差了幾個小時,你在日曆上顯示的時候,他究竟是 17號的呢?還是 18號的呢?還是 17 跟 18號呢?再加上一整天的屬性,那麼一天的日程不就變成兩天了?

一天是一個時區的一整天

一天是當前時區的一整天也就是從0點到次日的0點,他其實是存在明確的時間段的概念的。
當我們存在於不同的時區的時候,他就應該按照普通的時間段來進行表示了,畢竟本身跨天的時間段這個概念肯定是存在的。

更深層的衝突

World_Time_Zones_Map

在探討更深層的衝突之前,我們還是先來統一一下幾個概念

全天,我們之前已經講過了,一天的概念,其實是從0點到次日0點。但是你有沒有想過,這兩個0點是哪個時區的?其實是你所在時區的對不對,比如説北京時間0點,切換中國的日期。那如果你在日本的話,你是不是按照日本的0點來進行時間上的切換?他們中間差了1個小時哦,我説的一天,跟你在日本説的一天,已經差了一個小時了哦,如果我們把17號這個概念對應到這兩個時區裏邊,他們去掉重疊的時間部分,其實已經是25個小時了。
換句話説,當你提及17號的時候,其實,你最多能在25個小時內提到今天是17號,那我們在擴大一下這個概念,當你現在是UTC時間的17號,他是24小時,當你往東移動一個時區,那麼17號所代表的時間就會增加1小時,這樣的兄弟東邊還有11個,西邊還有12個,這麼算下來,其實你一共有49個小時説今天是17號?其實是48,因為+12 -12 是重疊的,理論上你可以認為他只能選一邊,純數學上來看的話,他們應該是中心左邊跟右邊,也就是 這個特殊的時區只有半個小時,當然實際情況要比這個複雜一點。

有點難理解是不是,其實我們可以藉助工具來驗證一下這個説法。
怎麼驗證呢?我們從UTC+12 的0點到 24點,然後從UTC-12 的0點到24點,然後取他們的最大值,看看總共的時長究竟有多少。

http://time.syiban.com/zhshiqu.html

看一下這個小工具

圖片
這個是UTC+12 的開始時間 也就是 UTC時間的 2025/12/16 12:00:00

圖片
這個是UTC+12 的結束時間 也就是 UTC時間的 2025/12/17 12:00:00

圖片
這個是UTC-12 的開始時間 也就是 UTC時間的 2025/12/17 12:00:00

圖片
這個是UTC-12 的結束時間 也就是 UTC時間的 2025/12/18 12:00:00

我們取所有時間的最小值 也 就是 2025/12/16 12:00:00 到最大值 也就是 2025/12/18 12:00:00
也就是2天,剛好48小時

一共有25個時區,其實跟意義上的一天24個小時,每個時區相差一個小時的通俗概念上來説説稍微有點不太一樣,其實有25個時區,是UTC 時區 東經、西經各12個時區,所以一共有25個時區,那一天24個小時是怎麼分出來25個時區呢?其實東12跟西12其實物理上是重疊的區域,也就是説,他們去掉日期只對比時間的話,其實是一樣的,但是他們的日期缺整整相差了一天,也就是24小時。

既然你能理解,他們的時間相同但是他們的日期不同的概念的話,我們可以再舉個詳細一點的例子。

圖片
假設這裏的A點是 UTC+12時區、B點事UTC-12時區,他們幾乎是在同一個經度上,他們觀察太陽幾乎是一樣的,但是他們兩個差了整整一天。

那麼,這個時候A點上的小a要請17號一整天的假,在B點上的小b是一個考勤管理員,從他本地時間刪過來看,他會發現,Wow小a請了17號的假,但是小a 16號翹班了,17號反而來上班了。

這種問題,如果強制使用17號一天的概念統一全球,那麼這個問題將無法調和。

所以,為了解決這個問題,應該如下處理:
1、如果當前時區內的時間一切如常處理,概念沒有衝突
2、顯示時間應該以當前用户人的時間為準,保留原始時間、原始時區概念
3、真正落庫的時間使用標準化時間(不一定是UTC時間,時間就是時間而已,他只是一個時間點,UTC也好,東八也好,只是這個時間點的某一種表現形式),展示的時候再轉換為需要的時間
4、如果跨時區了,如果覺得表現困難,那可以考慮跨時區的時候是時間段,本時區的時候才表現一整天的概念。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.