遇到件很奇怪的事情,應用内顯示了目前伺服器的時間,在一定時間内有雙倍經驗,可是在美國的玩家反映說她顯示的是她用戶端的時間(非中原標準時間),我本地的時間與它截圖過來顯示的時間相差16小時。

究其原因,程式并非直接使用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分鐘。
這樣修正後,再調用格式化方法來顯示時間就正常了。