我的電腦是Windows 7 64位;我在美國東海岸(東部時間);右鍵單擊任務欄時鐘並選擇「調整日期/時間」 - 標記我的時區「(UTC-05:00)東部時間(美國&加拿大)」並且告訴「日期和時間」小程序夏令時結束於11月。 (對於那些後來出現的,這是在四月,我們做了「春季前進」,以達到夏令時。)Windows GetTimeZoneInformation時差與ISO網站或谷歌不匹配
調用Windows GetTimeZoneInformation或GetDynamicTimeZoneInformation APIs(後者僅適用於Vista或更高版本)返回300分鐘的「偏差」值,5小時。 (偏差值不是負數,因爲該值的文檔顯示「UTC =當地時間+偏差」。)
但是,如果我去ISO web site that claims to show me the time on my computer它顯示一個匹配時鐘但結束-0400的時間。 (我試圖複製/粘貼它,但很難,因爲它每秒都在變化。)在Google中輸入「當前時間utc」顯示的時間比這裏的時間提前4小時(不是5小時)。
讓我感到困惑 - 我有一個運行Windows Server 2008的EC2實例,其他人設置並說故意設置爲GMT,以便根據服務器時鐘記錄的時間不會產生1小時跳轉夏令時。
當我連接到該服務器時,它顯示了一個比我在這裏看到的時間提前5小時的時間。但它在控制面板中的日期/時間小程序(與Windows 7不同)顯示當前時區爲「格林尼治標準時間(格林尼治標準時間)(愛丁堡,里斯本,倫敦)」,但也有「時區」(GMT)協調世界時「 - UTC - 如果我將時區更改爲(我認爲正確的),偏移量爲4小時。
Windows 7上的「時區設置」對話框(通過點擊上面討論的「日期和時間」小程序中的「更改時區...」按鈕來達到)具有標記爲「(UTC)協調世界時「(從現在起4小時)和」(UTC)都柏林,愛丁堡,里斯本,倫敦「(從現在起5小時)。
除了認爲EC2實例的時區設置錯誤 - 它應該被設置爲UTC,而不是倫敦時間來完成上述目標 - 我不理解這一點。美國的Windows 7說我距離UTC有5個小時;其他一切(包括Windows 2008設置爲UTC時間)表示4個小時。
那麼例程應該怎麼做才能產生具有拖尾時區偏移量的ISO風格時間戳? Windows API告訴我它應該是-0500,但其他一切都應該是-0400。幫幫我!!
偏移量取決於您何時測量它(無論DST是否處於活動狀態)。那是你的問題。 – SLaks
因此,返回偏差值的API以及DST是否處於活動狀態(在API返回碼中)不會調整偏差以允許我單獨使用它?我必須同時使用偏見和「我們在DST嗎?」數據拿出正確的答案? –
你使用什麼datetime API?應該有一個函數需要一個時間戳併爲其返回一個偏移量。請注意,某些時區的DST偏移不是一個小時。 – SLaks