2012-02-01 63 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。

相关问题