2011-02-28 51 views
1

我有時間,以UTC表示。我也有一個「房間」的任務,它有部分與它相關的時區信息(它有一個位置,所以我知道它是東方,太平洋等)。確定給定時區的UTC時間是否在DST

我需要採取UTC時間,並將其轉換爲「目標」時區。然而,日期可能在未來或過去,所以根據適當的時區規則,「目標」時區需要是「標準」或「日光」。

所以,我想是這樣的:

TimeZoneInfo.ConvertTimeFromUtc(UTCDateTime, TimeZoneInfo.FindSystemTimeZoneById(tz)); 

但我不知道怎麼去「TZ」,因爲我所知道的是,它(例如)PST PDT值,我不知道哪一個。

我該如何解決這個問題?

回答

1

您總是傳遞標準(非夏令時啓用)時區的名稱。在你的情況下,這是「太平洋標準時間」。

要找到這些名稱,請使用Regedit.exe在機器的註冊表中查找。導航到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones。請注意,此列表僅對於Windows Vista及其以上版本纔是可靠的,因此您的代碼對於早期版本(2000和XP)無法很好地工作。缺少的一個功能是有關夏令時規則以前更改的歷史信息。 「動態DST」子項。該機器還必須啓用Windows Update才能接收這些規則的更新。

當然,它不會跟蹤當地有關DST規則的政治決策。例如在美國,例如印第安納州,亞利桑那州和美洲印第安人部落地區的縣。

+0

我只是用這個asnwer回答我自己的問題。謝謝,這是正確的。這是一個網絡應用程序,所以我覆蓋重新:XP。此外,您至少可以通過以下方式對夏令時進行基本檢查: string tz =「Pacific Standard Time」 TimeZoneInfo.FindSystemTimeZoneById(tz).IsDaylightSavingsTime(date); – jvenema 2011-02-28 16:50:03

0

我不認爲這是可能的給你的信息。即使你知道位置的問題是時區不是1:1映射到一個特定的國家,所以你不能假設它將是哪個時區。

有一些web服務可以讓你查詢基於城市/郵政編碼和其他信息的時區信息,這可能是你唯一的選擇。

0

由於您已經知道區域,並且您在TimeZoneInfo對象中擁有UTC時間,因此在轉換後應用IsDaylightSavingTime(UTCDateTime)方法來確定標準時間或夏令時時間是否適用於您的本地時間。

如果您想將名稱命名爲適當的本地時間(例如PST或PDT),您可以從StandardName和DaylightName屬性中獲取它們。

Microsoft聯機文檔中存在有關模糊時間和Windows XP平臺上的行爲的一些警告。

相關問題