[問題] 時區的時間轉換

作者: heavenbetula (綠草)   2014-02-21 21:38:07
先附上書上截取的一小段程式:
setInterval(worldTime,1000);//每1秒鐘執行worldTime自訂函數1次
function worldTime(){
//使用zoneTime()自訂函數,傳遞參數台灣GMT時差+8,取得台灣目前時間
var hms = zoneTime(8);
//畫面上的taipei_txt文字欄位顯示時間
taipei_txt.text = hms[0] + ":" + hms[1]+ ":" + hms[2];
}
function zoneTime(GMT){
var watch= new Date();
//利用本地端小時數,及傳遞的GMT參數作不同時區加時,作為時間物件新的小時數資料
watch.setHours(watch.getHours()+ GMT);
//將時間物件取得的國際標準時間時、分、秒儲存在陣列中
var hms:Array = [watch.getUTCHours(),watch.getUTCMinutes(),watch.getUTCSeconds()];
return hms;
}
請問各位大大,watch.setHours(watch.getHours()+GMT);此行為何要將小時轉為毫秒
且我用trace查看setHours(watch.getHours()+ GMT),與setHours(watch.getHours()
發現值根本一樣啊...這樣GMT不就白加?
還有,國際標準時間應該是固定在跑的,為何hms陣列的內容,還會隨著watch.setHours()
在改變?
作者: KawasumiMai (さあ、死ぬがいい)   2014-02-22 18:51:00
沒寫過類似的東西,不過幫你測試了一下於台灣時間18點,將時區改成東京,也就是顯示19點trace的結果GMT=8 估計他會依照網路位置取得正確時區(台灣的+8)getHours = 19 也就是設定的東京時間watch.getHours()+GMT = 27setHours(watch.getHours()) = 1393095346408setHours(watch.getHours()+ GMT) = 1393124146408所以並沒有如文中說的一樣,可能你是用台灣時區去測另外watch.setHours(watch.getHours()+ GMT)之後watch.getUTCHours() 就顯示18點,在這之前會是10點估計是格林威治那邊的標準時間,所以問題還是在GMT如果使用內定函數會取得國際標準時間跟設定的時區時間但是GMT看似會依照位置顯示所在地正確時區所以以GMT為標準(setHour)之後則可用函數取得正確時間
作者: heavenbetula (綠草)   2014-02-22 19:37:00
感謝K大!

Links booklink

Contact Us: admin [ a t ] ucptt.com