答案似乎是否定,但我看到一个客户跟踪显示西班牙语的本地时区名称。信息来源来自GetTimeZoneInformation。该文档说结构中的这些名称将始终为英文,用户可见的名称来自资源文件。无论哪种方式确认都会很棒。需要说明的是,正是这种结构:
typedef struct _TIME_ZONE_INFORMATION {
LONG Bias;
WCHAR StandardName[32];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[32];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION;
StandardName和DaylightName是否会非英语?
答案 0 :(得分:3)
我不确定你在哪里读到他们只是英文。来自MSDN Documentation:
StandardName
和DaylightName
都根据当前用户默认的UI语言进行了本地化。
此外,在现代Windows上,您应该主要使用DYNAMIC_TIME_ZONE_INFORMATION
结构,使用GetDynamicTimeZoneInformation
等API,而不是经典的GetTimeZoneInformation
功能。此结构包含相同的标准和日光名称,并且也是本地化的。
如果按预期使用,这些结构将填充来自HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
下的Windows注册表的信息。每个条目都有四个相关的字符串:
Std
值是标准时间生效时要使用的本地化名称。这将映射到结构中的StandardName
字段。
Dlt
值是在日光时间生效时使用的本地化名称。这将映射到结构中的DaylightName
字段。
Display
值是用于一般表示时区条目的本地化名称,用于显示时区列表(例如在Windows控制面板中)或{{1在命令行上,或在.NET中使用tzutil.exe
。它不是Win32结构的一部分。
注册表项的键永远不会本地化。它始终为英语,是时区的唯一标识符。在TimeZoneInfo.DisplayName
结构中,它对应于DYNAMIC_TIME_ZONE_INFORMATION
字段。在.NET中,它对应于TimeZoneKeyName
。另外请记住,虽然键通常与标准名称的英文形式相匹配,但有一些例外情况却没有。此外,保证特定密钥的名称永远不会改变,而理论上它下面的本地化值可以。
在这里,您可以看到Windows控制面板中的显示名称在英文和中文中的显示方式。使用标准和日光名称进行类似的本地化:
最后 - 恕我直言,这些名字在很多情况下都非常垃圾。例如,没有“GMT Daylight Time”这样的东西 - 它实际上被称为“英国夏令时”。唯一的本地化时区名称的最佳来源是CLDR,您可以直接使用它,也可以通过C和Java中的ICU或我的TimeZoneNames库中的库来使用。 NET。