gpt4 book ai didi

c# - TimeZoneInfo.GetSystemTimeZones() 在不同的计算机上返回不一致的信息

转载 作者:行者123 更新时间:2023-11-30 15:40:33 25 4
gpt4 key购买 nike

如果我用

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

获取时区字符串列表,然后在某些系统上返回前缀为 (GMT) 的字符串,在其他系统上返回前缀为 (UTC) 的字符串。对此不是 100% 确定,但似乎 Vista 列出 (GMT) 值、Windows 7 列出 (UTC) 值和 Windows Server 列表 (GMT)

这是怎么回事,我可以让 Windows 7 列出 Vista GMT 值吗?我想要一个适用于所有 Windows 机器的一致列表。

仅供引用 在同一系统中,我还使用以下行来填充 MVC 下拉列表:

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

谢谢

最佳答案

您正在使用 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 中)。

关于c# - TimeZoneInfo.GetSystemTimeZones() 在不同的计算机上返回不一致的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com