2013-10-18 66 views
0

所以我有一個非常簡單但惱人的問題。我創建一個日期對象並調用getHours()方法,並且返回似乎總是爲零。也許我做錯了什麼?As3日期對象沒有正確返回小時

var d:Date = new Date(1382166000000); // 10/19/13 @ 2:00:00am EST 
trace(d.getTime() + " : " + d.getHours()); 

//output: 1382166000000 : 0 

任何想法?除非我感到非常困惑,否則不應該讓小孩回來2?

+0

您確定?我似乎越來越1382166000000:2. – Fygo

+0

是的,我從我的As3文檔複製和粘貼的代碼。也許它可能與我的機器的時間設置有關? (另外我爲AIR 3.4導出,如果這可能會影響事情嗎?) – rcooper102

+0

是的,它受本地計算機時區設置的影響。但是,如果設置正確,它應該代表每個時區的同一時間。 (至少據我所知,至少) – Fygo

回答

2

Date不按照您認爲的方式工作。它可以以兩種格式之一存在:本地時間或UTC。

getHours()方法返回本地時間,或根據計算機的內部時區偏移格式化的UTC時間。你通過的時間實際上是UTC的上午7點。所以通過這個邏輯,你(和我)在PST(或UTC-7)中。如果您運行d.timezoneOffset,則應返回420,即以分鐘爲單位的7小時。

現在,大多數時間你都不想從來沒有想與除UTC以外的任何東西(UTC是一個常數,特別是在電腦中)。因此,忘記getHours()方法,而是看看getUTCHours()

trace(d.getTime() + " : " + d.getUTCHours()); // output 1382166000000 : 7 

因此,這會給你在UTC時間的時間。接下來,您必須確定要將其格式化爲的時區。 EST是UTC-5,所以你想從UTC時間減去5。

trace(d.getTime() + " : " + (d.getUTCHours() - 5)); // output 1382166000000 : 2 

這就給你準確的你所期待的。

只是爲了重申:AS3的Date不允許允許設置時區。您只能訪問UTC和本地時區中的時間。而已。如果您想在任何其他時區使用時間,則需要手動進行格式化,如上所述。

相關問題