我轉換,它表示在太平洋時區時間,我使用創建一個DateTime
對象的字符串:TimeZoneInfo.ConvertTime從PST到UTC AEST - 關閉一小時
var pacificDateTime = new DateTime(2016, 11, 16, 15, 0, 0) // 11/16/2016 3:00:00 PM
利用這一點,我創建一個DateTimeOffset
,因爲最終它變得更容易處理。
var pacificTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var dateTimeNoKind = new DateTime(pacificDateTime.Ticks, DateTimeKind.Unspecified)
var DateTimeOffsetValue = TimeZoneInfo.ConverTimeToUtc(dateTimeNoKind, pacificTimeZoneInfo) // 11/16/2016 11:00:00 PM
到目前爲止這麼好。 UTC與太平洋的區別在於UTC提前8小時(給定時間在夏令時範圍內)。
然後我想轉換從UTC到AEST,但是這是問題出現的位置:
var australianEasternTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
TimeZoneInfo.ConvertTime(DateTimeOffsetValue, australianEasternTimeZoneInfo) // 11/17/2016 10:00:00 AM
AEST領先UTC通過10小時。我曾預計價值爲11/17/2016 09:00:00 AM
,但我得到了一個額外的小時增加了我的結果。
作爲一項測試,當我從UTC時間轉換爲PST或GMT或EST時,它們似乎會正確轉換回來。
我覺得我缺少明顯的東西或忽略了一些簡單的東西?
AEST當前是UTC + 11,而不是UTC + 10。我們正在享受夏令時。 'TimeZoneInfo.FindSystemTimeZoneById(「AUS東部標準時間」)。IsDaylightSavingTime(DateTime.UtcNow)' – Rob
@Rob實際上AEST總是UTC + 10,它只是澳大利亞目前並沒有觀察它而是AEDT。 – zerkms
@zerkms你是對的 - 這是我忽視的一個區別。然而,''AUS東部標準時間''內部映射到同一個區域,'DaylightName'和'StandardName' – Rob