[Software architecture]多時區(Timezone)做法
我們應該都知道世界各地,只要經度有差別,就有可能型成時差,以下表為例,它是以台灣時間為基準來算時差:
http://www.concordfutures.com.tw/information/world_time.htm
美國東部與台灣的時差為13小時,西部則為14個小時,所以當我們現在的時間是下午三點(15:00)時,美國東岸的時間是上午兩點(02:00),而紐西蘭則是下午七點(19:00),這之間的差距都是由時差所造成。
一般來說我們習慣上是以經度0度的國際換日線做為我們計算時間的標準,而這個時間我們稱之為格林威治時間,以格林威治時間為基準,往東走為正,往西走為負,這部分資料我們可以參考下面這張圖:
http://yukz.com/links/ref/TimeZoneMap.jpg
然而時差對我們的系統設計會造成什麼樣的問題?我們看一下下圖的系統佈署:
我們將Server佈署在中國大陸,而系統的使用者則遍及大陸、台灣、澳洲與美國,以格林威治時間來算,大致上可以算出各個使用地區的時差狀況。
從這邊衍生的狀況為,我系統的時間該以何地為準?如果我以Server放置的地點為準,我呈現在美東、台灣與澳洲的時間應該為何?若也是Server的時間,那有可能出現美東的用戶正在填寫一張填表日期為明天的單子;而若是以Clinet端的時間為準,那存進資料庫的時間又該以哪個做為標準呢?這種問題往往很容易出現一些讓使用者感到愕然的狀況,又或者讓兩地的使用者溝通出現Trouble。
這時候我們可能就會採用所謂Time-Shift的方式來做處理,統一將資料庫存入的時間轉換為格林威治時間,呈現時再轉成Client的時間,當Clinet端存檔時再將時間轉成格林威治時間,也就是說資料庫中的時間永遠都是同一個標準,但針對不同的Client會做不同的呈現,如下圖:
SAP也是採用類似的方法來處理多時區的問題,也可以參考看看:http://help.sap.com/erp2005_ehp_04/helpdata/EN/42/b5fe9e11cf4960b91384aafe3cfc86/content.htm
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |