Windows 时区信息结构中的Microsoft时区名称是否翻译过?
答案似乎是否定的,但是我看到一个客户跟踪显示了当地时区的西班牙语名称。信息的来源是GetTimeZoneInformation。该文档说,结构中的这些名称将始终为英语,并且用户可见的名称来自资源文件。无论哪种方式都能得到确认,这将是非常好的。明确地说,这是一种结构:Windows 时区信息结构中的Microsoft时区名称是否翻译过?,windows,winapi,timezone,Windows,Winapi,Timezone,答案似乎是否定的,但是我看到一个客户跟踪显示了当地时区的西班牙语名称。信息的来源是GetTimeZoneInformation。该文档说,结构中的这些名称将始终为英语,并且用户可见的名称来自资源文件。无论哪种方式都能得到确认,这将是非常好的。明确地说,这是一种结构: typedef struct _TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[32]; SYSTEMTIME StandardDate;
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会不会是非英语的?我不知道你在哪里读到的它们都是英语的。从:
StandardName
和DaylightName
都是根据当前用户默认的UI语言进行本地化的
此外,在现代Windows上,您应该主要使用DYNAMIC\u timeu\u ZONE\u INFORMATION
结构,以及GetDynamicTimeZoneInformation
等API,而不是经典的GetTimeZoneInformation
函数。此结构包含相同的标准名称和日光名称,并且也是本地化的
按预期使用时,这些结构将由Windows注册表中的信息填充,位于HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
下。每个条目都有四个相关字符串:
值是标准时间生效时使用的本地化名称。这将映射到结构中的Std
字段StandardName
值是夏令时生效时要使用的本地化名称。这将映射到结构中的Dlt
字段DaylightName
值是用于一般表示时区条目的本地化名称,在显示时区列表时使用,例如在Windows控制面板中,或与命令行上的Display
tzutil.exe一起,或与.NET中的
TimeZoneInfo.DisplayName一起使用。它不是任何Win32结构的一部分
- 注册表项的项从未本地化。它始终使用英语,并且是时区的唯一标识符。在
结构中,它对应于DYNAMIC\u TIME\u ZONE\u INFORMATION
字段。在.NET中,它对应于TimeZoneKeyName
。还请记住,虽然键通常与标准名称的英文形式匹配,但也有一些例外情况不匹配。此外,特定键的名称保证永远不会更改,而其下的本地化值在理论上可能会更改TimeZoneInfo.Id
最后,我认为这些名字在很多情况下都是垃圾。例如,没有“GMT夏令时”这样的东西——它实际上被称为“英国夏令时”。本地化时区名称的唯一好来源是,您可以直接使用,也可以通过C和Java中的库或my library for.NET中的库来使用。回答得很好。错过了GetTimeZoneInformation底部的一行。微软决定翻译所有的字符串似乎有些奇怪,特别是因为这个结构对于用户界面来说是不可见的。谢谢你的帮助。