任何人都需要知道的「世界時間系統」構成原理,尤其開發人員
下面是同一時刻的中國時間、英國時間和美國時間:
此時此刻,中國的人們剛午休完準備開始下午的工作,英國的人們已經睡了一晚上正準備早晨起床,美國的人們有的還在熬夜、有的已經進入夢鄉,但不管睡沒睡,他們都即將迎來新的一天。
為什麼會是這樣的呢?本文將告訴你完整的答案,記住本文之後,夠你受用一輩子,至少也會是半輩子,祝願所有的讀者都能夠去實地看一看。
引言
人們很早就知道自己腳下的這片土地非常大,還知道在很遠的地方居住著其它人們,還有山川、河流、大海。但是人們並沒有辦法給出很遠的地方到底在哪裡。
就像小孩子問你,美國在哪裡,大人們總是說,美國和中國之間啊,有一個很大的大海,美國就在大海的對岸,總之很遠。
後來人們認識到地球是一個球體,但是人們依然沒有好的辦法給出很遠的地方究竟在哪裡。就像我們對小孩說,美國啊,在地球的另一面,總之還是很遠。
經度、緯度
為了更好的描述地球上的一個具體位置,人們引入了經度和緯度的概念,並規定,東西方向的線是緯線,南北方向的線是經線。
由於地球是自西向東轉動,且球體中間是最粗的地方,所以就把地球的中間定義為緯度的起點,即0度緯線,其實就是赤道了。
往北半球稱為北緯,南半球稱為南緯。可見赤道是最長的緯線,越往南北極方向走,緯線越短,且北極是北緯90度,南極是南緯90度。
緯度的起點選在赤道沒有任何爭議,但是經度的起點選在哪裡呢?這確實是一個問題,因為每條經線都是一樣長的,且沒有什麼本質差別。
1851年御用天文學家艾裡在英國倫敦格林威治天文臺設定中星儀,並以此確定格林威治子午線。因為當時超過三分之二的船隻已使用該線為參考子午線,在1884年於美國華盛頓特區舉行的國際本初子午線大會上正式定之為經度的起點。
(格林威治天文臺)
因此經過這個地方的經線就是0度經線,又稱為本初子午線。自此向東稱為東經,向西稱為西經。0度經線被東經和西經共用。
(0度經線 / 本初子午線)
由於一個圓周是360度,東經西經各分一半,所以都是180度,且東經西經的終點是重合的,就在180度處,就像它們的起點也是重合的,就在0度處一樣。
所以經過180度處的經線同樣被東經和西經共用,由於180度經線和0度經線正好相對,因此又稱為對向子午線,是和本初子午線相對的一種叫法。
因此,東經0度和西經0度是一樣的,同樣東經180度和西經180度也是一樣的,那麼自然北緯0度和南緯0度也是一樣的。
時區
雖然截止到現在科學界對於時間的研究還沒有什麼結論,但是人們對於時間的認識卻是在很早很早以前就開始了。
人們認識到日出東方落於西山,晝夜交替日復一日,都是源於地球的自轉,能照到太陽光的地方就是白天,照不到的就是黑夜。
因此人們認為時間和地球的自轉有關,由於自轉是自西向東的,主要和經度有關,所以時間也和經度有關。
以前國際時間不統一,經常出現“穿越”情況,比如收到信件的當地時間比寄出信件的當地時間還要早,即人家還沒寄呢你就已經收到了。
1879年,加拿大鐵路工程師伏列明提出了“區時”的概念,在1884年的一次國際會議上得到認同,由此正式建立了統一世界計量時刻的“區時系統”。
該系統規定,地球上每15度經度範圍作為一個區域(即太陽1個小時內走過的經度)。這樣,整個地球的表面就被劃分為24個區域。
每個區域內的時間都按照該區域的中央經線(距離東西兩側各7.5度位置的那條經線)處的時間來計量,這樣一個區域內就只有一個時間了。
由於每天是24小時,地球一週被分為了24個區域,所以每個區域的時長是1小時,且相鄰區域的時間差值也是1小時。
因此我們可以從兩個方面來理解時區,一是用區域來表示時間,即時間的區域,二是每個區域是1小時,相鄰區域相差也是1小時。
現實中時區並不是嚴格按經線來劃分的,而是按自然條件來劃分的。因為實際上,常常1個國家或1個省份同時跨著2個或更多時區,為了照顧到行政上的方便,常將1個國家或1個省份劃在一起。
和緯度、經度有起點一樣,時區也有起點,而且這個起點應該和某條經線有關。沒錯,答案和你想的是一樣的。
同樣是在1884年的那個會議上,不僅把經過英國倫敦東南格林威治的經線作為計算地理的起點,同時也作為世界時區的起點。
該時區稱為0時區,自此向東稱為東時區,向西稱為西時區,0時區是東時區和西時區的分界線,也可以認為被東西時區共用。
東邊從東1時區到東11時區,西邊從西1時區到西11時區,這樣還剩一個時區,就是12時區,它同樣是東時區和西時區交界處的分界線。
也可以認為被東西時區共用,因此既可以稱為東12時區,也可以稱為西12時區,其實是一樣的。
因此,東時區和西時區從0時區開始,向東和向西延伸,到12時區處相交。0時區是起點,12時區是終點。
時間系統
本初子午線又叫格林威治子午線,它也曾經被用作時間的標準,稱為格林威治時間,縮寫是GMT。程式設計師都應該很熟悉了。
即以格林威治當地的時間作為一個標準時間,然後其它地方的時間根據地球的自轉推算出來,所以格林威治時間在天文領域應用廣泛。
可以說格林威治時間是以地球自轉為基礎的時間計量系統,可是後來人們認識到地球自轉速度並不規則,因此格林威治時間已由協調世界時取代。
協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。是以原子時秒長為基礎的一種時間計量系統。
協調世界時是由格林威治時間演化而來,格林威治時間因為本初子午線經過英國倫敦的格林威治而得名,但是本初子午線除了經過英國外還經過了法國等共8個國家。
協調世界時在英文中的縮寫是CUT,在法文中的縮寫是TUC,它們是不相同的,為了照顧多方,最後做出妥協,縮寫定為UTC,因此也稱UTC時間。
按照格林威治時間系統的定義,格林威治時間是標準時間,即GMT。由於地球自西向東轉,所以東邊先看到太陽,因此格林威治東邊的時間比格林威治早(提前到來),西邊的則比格林威治晚(滯後到來)。
又由於一個時區就是一個小時,因此,東1時區的時間就是格林威治時間加上1小時,即GMT+1,中國採用東8時區時間,即GMT+8。西1時區的時間就是格林威治時間減去1小時,即GMT-1。
這種寫法我們都見過,除了這裡說的用來表示時間之外,它也可以用來表示時區。GMT就是0時區,GMT+1就是東1時區,GMT-1就是西1時區。
後來改為世界協調時間之後就成UTC了,於是就變成UTC+1,UTC+8,UTC-1,基本含義還是保持不變的。
可以看到,時間系統的定義就是由一個基準時間加上偏移量組成,偏移量是正的表示向較早(東邊或未來)的時間偏移,偏移量是負的表示向較晚(西邊或過去)的時間偏移。
為了降低複雜度,偏移量都是按整小時來算的,不考慮分鐘和秒等,所以全世界的時間裡的分鐘和秒都是一樣的,只要小時是不同的,因此全世界只有24種不同的時間。
“時間的起點”
對於一個環形物體,其實是沒有嚴格意義的開始位置和結束位置的,同樣也沒有嚴格意義的前後,除非人為指定一個特殊位置作為起點。
比如兩個人在操場的環形跑道上跑步,假設你第一次看到時,這兩人已經跑了一會兒了,此時根本無法分出誰在前誰在後。
就像地球的自西向東轉動一樣,根本無法分出誰在東方、誰在西方,因為往東走和往西走都能到達目的地。自然也不知道誰靠前、誰靠後。很多人認為中國在東方,美國在西方。
理由是中國是中午時,美國還是半夜呢,因此中國先看到太陽,所以比美國早,因此中國在東方。這種邏輯是不對的,因為美國是中午時,中國也是半夜啊。
因此我們需要一個特殊的位置作為“時間的起點”,沒錯,這個特殊的位置就是0度經線,即本初子午線,也稱格林威治子午線,也是0時區,就在英國倫敦。
時間起點的位置找到了,那麼時間的起點應該是幾點呢?按照正常人的思維,時間的起點應該是凌晨0點。那到底對不對呢,來檢測下便知。
把倫敦的0時區當作凌晨0點,向東走,到中國時應該是上午8點,繼續向東,到美國時應該是下午18點,這樣一來美國的時間就比中國的還早了,這是錯誤的,可以在網上查一下,美國的時間是比中國晚的。
我們的邏輯並沒有錯,錯就錯在時間的起點假設錯了,不應該是凌晨0點。站在古人的角度,凌晨0點是三更半夜,黑燈瞎火的,沒有什麼意思啊。
古人渴望的是太陽,它們需要的是陽光,看到陽光就看到了希望。再說了,大家都是崇拜光明的,崇拜黑暗的是黑暗聖騎士,是邪惡的,哈哈。
而且0度經線又叫本初子午線,子代表子夜,也可以理解為子時,即晚上23點到次日凌晨1點這個時辰。午代表正午,也可以理解為午時,即中午11點到下午1點這個時辰。
而且理論上來說,格林威治標準時間的正午是指當太陽橫穿格林威治子午線時的時間。因此把正午12點作為時間的起點,再來檢測一下。
把倫敦的0時區當作正午12點,向東走,到中國時應該是晚上20點,由於中國是東8時區,再向東走4個時區就到了12時區,此時是凌晨24點(或0點),正好位於白令海峽附近。
再往東走就該變更日期了,由於12時區的中點就是180度經線的位置,1884年國際經度會議規定把它作為地球上“今天”和“昨天”的分界線,因此把這條經線稱為國際日期變更線,它主要位於太平洋中。
按照規定,凡是越過這條變更線時,日期都要發生變化,從東向西越過這條界線時,日期要加上1天(到了未來),從西向東越過這條界線時,日期要減去1天(到了過去)。這條線又叫“人為日界線”。
關於日期加1天還是減1天,可以這樣理解,當正午(12點)的陽光照射在倫敦的本初子午線上時,緊挨著國際日期變更線左側(西邊)的時間是晚上23點59分,這個時間已經從中午12點經過,所以靠前。也就是說倫敦是中午的時候,這裡已經是半夜了。
緊挨著國際日期變更線右側(東邊)的時間是凌晨0點01分,這個時間還未到中午12點,所以靠後。也就是說倫敦是中午的時候,這裡還是凌晨,天還沒亮呢。
因此,從東向西越線要加1天,可以認為是從今天到明天,即到了未來的時間,從西向東越線要減1天,可以認為是從今天到昨天,即到了過去的時間。
再回到剛才有關“時間的起點是幾點”的檢測,我們是從西往東走的,所以在白令海峽這裡要減1天,即回到了昨天凌晨0點,再往東走6個時區就到了美國,所以美國此時是早上6點,而且應該是昨天早上。
我們來算一下時間差,中國是晚上20點,美國是早上6點,正好相差14個小時,即中國比美國早14個小時,這是對的,但是美國應該是今天早上6點,而不是昨天早上6點。
這主要是我們舉得例子比較特殊,此時中國和美國都在國際日期變更線的右側,也可以認為兩國都已經從國際日期變更線上轉過去了,所以日期是同一天。
由於一天是24小時,中國比美國早14小時,所以中國和美國能夠擁有相同日期的時長是每天只有10小時。且從中國北京時間的下午2點到晚上23點59分,對應的美國時間是從凌晨0點0分到上午10點。這段時間內,兩國的日期是同一天,
剩下的時間段內,中國日期比美國早1天。即中國已經進入新的一天了,美國需要在14個小時後才能進入新的一天。即中國北京時間的今天凌晨0點到下午2點,對應美國昨天的上午10點到晚上23點59分。在這個14小時內,中國日期比美國早1天。
早晚、前後
相信有些讀者的大腦已出現“腦力不足”的訊號,因為這裡講的時間和我們日常生活中的時間是不一樣的,主要是角度不同,這裡講的是世界時間,日常生活中指的是當地時間。且當地時間只有一個,世界時間有24個呢。
先說當地時間,無論什麼時候,一個地方的當地時間只有一個,比如你在3月2日買了一個膝上型電腦,他在3月3日買了一個,那麼你比他買的早,他比你買的晚。
所以在當地時間這個上下文中,指的是事件發生的早晚問題,且日期越小發生的越早,日期越大發生的越晚。再如80後比90後出生的早,00後比90後出生的晚。
再說世界時間,在世界上不同的地方(時區),同一時刻的時間是不一樣的,一個時區一個時間,共24個不同的時間。既然時間是不同的,那就一定是有的時間靠前,有的時間靠後。
以地球的自轉來說,先看到太陽的地方的時間靠前,後看到太陽的地方的時間靠後。由於地球是自西向東轉,所以東邊的地方先看到太陽,西邊的地方後看到太陽,因此東邊的時間靠前,西邊的時間靠後。
同樣太陽下山時,也是東邊先看不到,然後是西邊再看不到,在中國,當東北已經進入黑夜了,新疆那裡還豔陽高照呢,因為中國橫跨了5個時區,從東5時區到東9時區,為什麼中國採用東8區時間呢,因為北京在嚴格意義的東8區,上海也在。
這樣只是分出了時間的(超/靠)前(滯/靠)後,但是我們不能說10點就一定比9點靠前,因為可能是昨天的10點和今天的9點,因此這裡還有一個日期的問題,必須要進行日期的分界。
由於地球是圓球狀,沒有明顯的分割線,所以只能人為的指定一條線作為分割線,它就是180度經線,也稱對向子午線。根據地球自轉方向來規定,分割線左側(西邊)為新一(明)天的開始,分割線右側(東邊)為當下這一(今)天的結束。
由於這一條線對應著國際日期的變更,因此被稱為國際日期變更線。因此從東向西越線要加1天,等於來到了新的一天(next day),從西向東越線要減1天,等於回到了過去的一天(prev day)。
最後舉個示例,假設現在是當地時間2020-03-02 14:00:00,你從變更線的左側(西邊)跳到右側(東邊),然後站著不動,由於地球自西向東轉,且24小時才轉一圈,所以24小時後才轉回到你起跳之前的位置,說明你跳到了24小時之前,即穿越到了昨天(過去)。
即跳起的一瞬間,落地點的當地時間比起跳點的當地時間晚了24個小時,正好晚了1天,所以要減1天。等於穿越到了過去。因此落地的時間是2020-03-01 14:00:00,所以就是從西向東跳過國際日期變更線要減1天,相反從東向西跳過要加1天。
(END)
作者現任架構師,工作11年,Java技術棧,計算機基礎,用心寫文章,喜歡研究技術,崇尚簡單快樂。追求以通俗易懂的語言解說技術,希望所有的讀者都能看懂並記住。
>>> 熱門文章集錦 <<<
畢業10年,我有話說
我是一個協程
我是一個跳錶
執行緒池開門營業招聘開發人員的一天
遞迴 —— 你值得擁有
迄今為止最好理解的ZooKeeper入門文章
基於角色的訪問控制(RBAC)
徹徹底底給你講明白啥是SpringMvc非同步處理
【面試】我是如何面試別人List相關知識的,深度有點長文
我是如何在畢業不久只用1年就升為開發組長的
爸爸又給Spring MVC生了個弟弟叫Spring WebFlux
【面試】我是如何在面試別人Spring事務時“套路”對方的
【面試】Spring事務面試考點吐血整理(建議珍藏)
【面試】吃透了這些Redis知識點,面試官一定覺得你很NB(乾貨 | 建議珍藏)
【面試】如果你這樣回答“什麼是執行緒安全”,面試官都會對你刮目相看(建議珍藏)
【面試】迄今為止把同步/非同步/阻塞/非阻塞/BIO/NIO/AIO講的這麼清楚的好文章(快快珍藏)
【面試】一篇文章幫你徹底搞清楚“I/O多路複用”和“非同步I/O”的前世今生(深度好文,建議珍藏)
【面試】如果把執行緒當作一個人來對待,所有問題都瞬間明白了
Java多執行緒通關———基礎知識挑戰
品Spring:帝國的基石
>>> 玩轉SpringBoot系列文章 <<<
【玩轉SpringBoot】配置檔案yml的正確開啟姿勢
【玩轉SpringBoot】用好條件相關注解,開啟自動配置之門
【玩轉SpringBoot】給自動配置來個整體大揭祕
【玩轉SpringBoot】看似複雜的Environment其實很簡單
【玩轉SpringBoot】翻身做主人,一統web伺服器
【玩轉SpringBoot】讓錯誤處理重新由web伺服器接管
【玩轉SpringBoot】SpringBoot應用的啟動過程一覽表
【玩轉SpringBoot】通過事件機制參與SpringBoot應用的啟動過程
【玩轉SpringBoot】非同步任務執行與其執行緒池配置
>>> 品Spring系列文章 <<<
品Spring:帝國的基石
品Spring:bean定義上梁山
品Spring:實現bean定義時採用的“先進生產力”
品Spring:註解終於“成功上位”
品Spring:能工巧匠們對註解的“加持”
品Spring:SpringBoot和Spring到底有沒有本質的不同?
品Spring:負責bean定義註冊的兩個“排頭兵”
品Spring:SpringBoot輕鬆取勝bean定義註冊的“第一階段”
品Spring:SpringBoot發起bean定義註冊的“二次攻堅戰”
品Spring:註解之王@Configuration和它的一眾“小弟們”
品Spring:bean工廠後處理器的呼叫規則
品Spring:詳細解說bean後處理器
品Spring:對@PostConstruct和@PreDestroy註解的處理方法
品Spring:對@Resource註解的處理方法
品Spring:對@Autowired和@Value註解的處理方法
品Spring:真沒想到,三十步才能完成一個bean例項的建立
品Spring:關於@Scheduled定時任務的思考與探索,結果尷尬了