我在前兩篇文章里分享了Global Ready的teams app時會遇到的不同挑戰。這篇我繼續分享在夏令時方面的挑戰。
夏令時,主要是為了節約能源,英文里通常縮寫成DST(Daylight Saving Time)。一般在天亮早的夏季人為將時間調快一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,從而節約照明用電。各個采納夏時制的國家具體規定不同。目前全世界有近110個國家每年要實行夏令時。
當然夏令時也有一些弊端:
- 對低緯度地區,夏令時作用不大。尤其這些地方在夏天十分濕熱,夜晚降臨時悶熱無法入眠,而清晨正是睡眠的好時間。
- 當夏令時開始和結束時,人們必須將所有計時儀器調快或調慢;當夏令時結束時,某些時間會在當天出現兩次,這些都容易構成混亂。并且影響航班的時間。
- 夏令時違背了設定時區的原意──盡量使中午貼近太陽上中天的時間。
我們以下圖為例,這個是澳大利亞的時間,一般情況下,分為三個時區,分別是加8,加9小時半,加10小時,但是在夏令時,下面幾個州會將時間調整為加10個半小時,和加11個小時。所以整個澳大利亞變成了有5個不同時間。
哪些國家,哪些區域有夏令時?這些沒有什么規則,因為這個完全是有不同的國家,州自行規定的。我們teams app里是需要去查表的,和時區劃分一樣,沒有什么簡單的規則。
我們國家之前也有過夏令時,在1986年至1991年,具體開始和結束日期分別是:
- 1986年5月4日至9月14日
- 1987年4月12日至9月13日
- 1988年4月10日至9月11日
- 1989年4月16日至9月17日
- 1990年4月15日至9月16日
- 1991年4月14日至9月15日
大家可以看到每年的開始和結束時間都不同。所以我們在開發teams app的時候不要自己嘗試的去判斷夏令時,建議使用成熟的library,不要重復造輪子,目前任何一門熱門的編程語言,都有很成熟的用于時間日期的庫或者SDK。我們學習如何使用就好。
另外需要和大家說一點,teams里目前發送給我們app的內容里,沒有包含夏令時信息,如下:
{"name": "composeExtension/fetchTask","type": "invoke","timestamp": "2019-06-17T14:32:04.956Z","localTimestamp": "2019-06-18T00:32:04.956+10:00","id": "f:1361493733941541435","channelId": "msteams","serviceUrl": "https://smba.trafficmanager.net/apac/","locale": "en-US",...
}
timestamp和localTimestamp兩個字段,通過這兩個字段,我們可以獲取用戶當前的UTC時間和用戶所在地的本地時間。比如上面這個json表明了,用戶在這個本地時間是在加10的時區。但是,并沒有告訴我們app用戶所在的時區和是否正在經歷夏令時,這個+10,可能是在+10時區,也可能是+9時區,但是正在經歷夏令時,所以+10小時。
如果大家對Teams app開發感興趣,強烈推薦中國微軟的牛人Ares陳老師最近出了一套的Teams開發系列視頻講座:Microsoft Teams開發入門和實踐 https://aka.ms/teamsdev163study?,從入門到精通Teams開發,對于準備從事或者正在從事Teams app開發的同學來說,必看!