使用getTimezoneOffset方法修正时差

遇到件很奇怪的事情,应用内显示了当前服务器的时间,在一定时间内有双倍经验,可是在美国的玩家反映说她显示的是她客户端的时间(非北京时间),我本地的时间与它截图过来显示的时间相差16小时。

image

image

究其原因,程序并非直接使用new Date()取的客户端操作系统的时间,而是服务器的时间(Linux事先与某一台时间服务器校对过时间--为北京时间)。而产生问题的根源在于,服务器将它当前时间转成毫秒数后传递给客户端,客户端显示的时候没有进行时差修正。使用getTimezoneOffset()可解决这个问题,因为它返回的是格林威治时间与本地时间之间的时差,而使用new Date()得到的结果,还是相对于本地时间的显示,所以想真正实现客户端与服务器端显示的时间一致,需要做如下调整:

var date:Date = new Date(xx);

var timezoneOffset:Number = date.getTimezoneOffset();

date.setTime(date.getTime() + timezoneOffset * 60 * 1000 + 480 * 60 * 1000);

先使用timezoneOffset()【此方法返回的是分钟】方法获取差值,这个就得到的是格林威治时间,而北京时间相对于它是需要再加上8小时的,也就是 8 * 60 = 480分钟。

这样修正后,再调用格式化方法来显示时间就正常了。

posted @ 2011-11-04 15:21  meteoric_cry  阅读(17768)  评论(0编辑  收藏  举报