我不确定你在哪里阅读他们只是英文。从MSDN Documentation:
两个StandardName
和DaylightName
根据当前用户的默认UI语言本地化。
此外,在现代的Windows,你应该大多使用的DYNAMIC_TIME_ZONE_INFORMATION
结构,API,如GetDynamicTimeZoneInformation
,而不是经典GetTimeZoneInformation
功能。这个结构包含相同的标准和日光名称,也是本地化的。
按照预期使用时,这些结构充满来自Windows注册表的信息,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
之下。每个条目都有四根弦是中肯:
的Std
值是在标准时间是在效果上要使用的本地化名称。这被映射到结构中的StandardName
字段。
Dlt
值是在夏令时生效时使用的本地化名称。这被映射到结构中的DaylightName
字段。
的Display
值用于本地化名称一般地表示的时区的条目,并且显示时间区的列表时使用 - 如在Windows控制面板,或与tzutil.exe
在命令行上,或者用.NET中的TimeZoneInfo.DisplayName
。它不是Win32结构的一部分。
该注册表项的密钥从未本地化。它始终是英文的,并且是时区的唯一标识符。在DYNAMIC_TIME_ZONE_INFORMATION
结构中,它对应于TimeZoneKeyName
字段。在.NET中它对应于TimeZoneInfo.Id
。同时请记住,尽管密钥通常是与标准名称的英文形式相匹配,但有一些例外情况不适用。此外,特定键的名称保证不会改变,而理论上它的本地化值可能会改变。
在这里,您可以看到显示名称在Windows控制面板中的英文和中文显示方式。类似的定位与标准和日光发生名称:
最后一点 - 恕我直言,这些名称在很多情况下很垃圾。例如,没有“GMT Daylight Time”这样的事实 - 它实际上被称为“英国夏令时”。本地化时区名称的唯一良好来源是CLDR,您可以直接使用该库,也可以通过库(例如C和Java中的ICU)或.NET的TimeZoneNames库。
很好的回答。错过了GetTimeZoneInformation底部的行。似乎奇怪的是,微软会决定翻译所有的字符串,特别是因为结构不会被用户界面看到。谢谢你的帮助。 –