如果代码中没有做时区的兼容话,不同时区看到的游戏世界可能就不一样。
比如一个活动是设定中午12点开始,但是玩家的时区是在美国(反正和中国不一样),他的前端程序活动就无法正常开启,因为前端程序以为他正在夜晚(时间没到),其实已经在北京时间(东八区+8)。
为什么呢?首先弄清楚几个概念:
协调世界时
,简称UTC 。
格林尼治台的时间
(英:Universal Time Coordinated ,法:Temps Universel Coordonné),又称世界统一时间,世界标准时间,国际协调时间。
我国处于第八时区 所以北京时间是
UTC
+8
时间是怎么表示的?
大家所处的当下是有一个标准时间,即UTC。
我们领国日本(
东九区+9
),中国(东八+8)。
如果UTC是零点。则这个时候中国是8点(0+8),日本是9点(0+9)。
如果我们一个网络活动是8点开启,在前端程序里面代码写死了8的话,日本的玩家可能无法正常,因为这个时候日本的电脑是九点。
解决办法。所有的时间都用UTC记录,服务端也同意用UTC记录,然后加权时区。
回到上面的活动,我们把程序里面的活动时间用UTC记录时间,即UTC-0点。在每个客户端中对比UTC时间,而不是加权了时区的本地时间。
当北京的UTC走到0点,也就是北京时间8点活动开启。此时日本
的UTC也走到0点,也就是东京时间9点活动开启。2地时间可以同步了。
as3,示例
var d:Date = new Date();
d.hours//计算了时区,+8
d.hoursUTC//没有加上时区 0
d.getTimezoneOffset()//以分钟为单位,返回计算机的本地时间和通用时间 (UTC) 之间的差值。
ps:有趣的是
2038年1月19日3时14分07秒,32位系统的UNIX时间将会被重置。