如果我使用
foreach (TimeZoneInfo info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.ToString()...
获取时区字符串列表,然后在某些系统上返回前缀为(GMT)的字符串,并返回其他系统上的字符串(UTC)。不是100%肯定这一点,但似乎Vista列表(GMT)值,Windows 7列表(UTC)值和Windows服务器列表(GMT)
发生了什么,我可以让Windows 7列出Vista GMT值吗?我想要一个适用于所有Windows机器的一致列表。
fyi在同一系统中,我还使用以下行填充MVC下拉列表:
<%: Html.DropDownListFor(model => model.Timezone,new SelectList(TimeZoneInfo.GetSystemTimeZones())) %>
由于
答案 0 :(得分:4)
您正在使用TimeZoneInfo.ToString()
,它使用TimeZoneInfo.DisplayName
。只需 依赖于系统 - 如果您通过时钟编辑系统时区,则显示相同的列表(据我所知)。 (我刚看过Vista和Windows 7的机器,看到了你刚刚描述过的相同的名字。)
如果您要查找一致的名称,请改用Id
属性。如果您想要从ID到一些已知显示名称的一致映射,您需要自己设置(例如,通过您所有系统与之通信的单个数据库)。您不应向用户显示Id
属性本身,因为它非常令人困惑 - 它几乎总是标准时间 ID,这会让人们感到困惑在白天节省时间。
如果您想将船推出,Unicode CLDR有关于如何向用户显示时区的信息(请参阅core/common/bcp47/timezone.xml
)但是使用了zoneinfo ID,那么您需要将这些映射回Windows系统ID(这是可行的;该信息也在CLDR中,在core/common/supplemental/windowsZones.xml
中)。
答案 1 :(得分:0)
RE:“不是100%肯定这一点,但似乎Vista列表(GMT)值,Windows 7列表(UTC)值和Windows服务器列表(GMT)”
Windows Server 2008 R2返回UTC。 Server 2003返回GMT。