2012-02-01 62 views
3

如果我使用TimeZoneInfo.GetSystemTimeZones()返回在不同的計算機

foreach (TimeZoneInfo info in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    if (info.ToString()... 

收購時區的字符串列表,然後在其上返回與(GMT)前綴字符串一些系統和與其他系統的信息不一致(世界標準時間)。不是100%確定這一點,但似乎Vista列表(GMT)值,Windows 7列表(GMT)值和Windows服務器列表(GMT)

發生了什麼,我可以讓Windows 7列出Vista的GMT值?我想要一個可以在所有Windows機器上工作的一致列表。

FYI在同一系統中,我還使用以下行來填充MVC下拉:

<%: Html.DropDownListFor(model => model.Timezone,new SelectList(TimeZoneInfo.GetSystemTimeZones())) %> 

感謝

+0

爲什麼你想要一個恆定列表?這聽起來像是顯示給用戶的數據,因此很可能是本地化的。我確信有一些財產給你一個獨特的,穩定的身份證。但是這個ID很可能只是爲電腦設計的。 – CodesInChaos 2012-02-01 11:26:10

回答

4

您使用TimeZoneInfo.ToString(),它採用TimeZoneInfo.DisplayName。簡而言之,系統相關的 - 這是相同的列表(據我所知),如果您要通過時鐘編輯系統時區,則顯示哪個列表。 (我剛剛查看了Vista和Windows 7的機器,並看到剛剛描述的相同名稱。)

如果要查找一致的名稱,請改用Id屬性。如果你想從ID到一些已知的顯示名稱的一致映射,你需要自己設置它(例如通過一個單一的數據庫,所有的系統對話)。你不應該顯示Id屬性本身給用戶,因爲它很混亂 - 它幾乎總是標準時間 ID,這會在夏令時中混淆人們。

如果你想推舟的那樣,Unicode CLDR在如何顯示時區的用戶(見core/common/bcp47/timezone.xml)信息,但使用的時區信息的ID,所以你這時就需要回到那些映射到Windows系統ID(這是可行的;該信息也在CLDR中,在core/common/supplemental/windowsZones.xml中)。

+0

感謝您的信息。我會按照你的建議,並自己設置一個自定義列表。 – Journeyman 2012-02-01 11:35:48

0

RE: 「不是100%肯定這一點,但似乎Vista的列表(GMT)值,和Windows 7列表(UTC)值,和Windows服務器列表(GMT)」

的Windows Server 2008 R2的回報世界標準時間。 Server 2003返回GMT。

相關問題