由于在運行的某SLG游戲在國內蘋果商店多次拿到推薦,我們打算把它做到海外,部署按照全球唯一服的架構來部署,運維同事將集群中的各個模塊選擇部署在美國芝加哥的機房。上線一段時間后客服反饋平時凌晨3點重置玩家每日數據的時間變成了4點,往后推遲了1小時,當時懷疑是不是出BUG了,查了代碼發現這里有貓膩:
public static final long GMT_8 = TimeZone.getDefault().getRawOffset();
并且查了這里的時區是America/Los_Angeles,按照經驗,這里走的是夏令時,夏令時時區會比平常的時間走的快,所以雖然是3點,實際上對應的夏令時時間是4點,這下找到問題的關鍵就有辦法來解決。
什么是夏令時,冬令時:
很簡單,我們平常用的格林威治標準時間(又譯:格林尼治標準時間,Greenwich Mean Time),到了三月,就在格林威治標準時的基礎上撥快一個小時,新的時間就是夏令時。到了十月,又在夏令時的基礎上撥慢一個小時,就形成冬令時了,說的再簡單點,冬令時就是格林威治標準時。
美國時間一般被認為是美國本土的時間。美國本土橫跨西五區至西十區,共六個時區,每個時區對應一個標準時間。從東向西分別為東部時間(EST)(西五區時間)、中部時間(CST)(西六區時間)、山地時間(MST)(西七區時間)、太平洋時間(西部時間)(PST)(西八區時間)、阿拉斯加時間(AKST)(西九區時間)和夏威夷時間(H