Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 时区信息结构中的Microsoft时区名称是否翻译过?_Windows_Winapi_Timezone - Fatal编程技术网

Windows 时区信息结构中的Microsoft时区名称是否翻译过?

Windows 时区信息结构中的Microsoft时区名称是否翻译过?,windows,winapi,timezone,Windows,Winapi,Timezone,答案似乎是否定的,但是我看到一个客户跟踪显示了当地时区的西班牙语名称。信息的来源是GetTimeZoneInformation。该文档说,结构中的这些名称将始终为英语,并且用户可见的名称来自资源文件。无论哪种方式都能得到确认,这将是非常好的。明确地说,这是一种结构: typedef struct _TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[32]; SYSTEMTIME StandardDate;

答案似乎是否定的,但是我看到一个客户跟踪显示了当地时区的西班牙语名称。信息的来源是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会不会是非英语的?

我不知道你在哪里读到的它们都是英语的。从:

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
    字段

  • Display
    值是用于一般表示时区条目的本地化名称,在显示时区列表时使用,例如在Windows控制面板中,或与命令行上的
    tzutil.exe一起,或与.NET中的
    TimeZoneInfo.DisplayName一起使用。它不是任何Win32结构的一部分

  • 注册表项的从未本地化。它始终使用英语,并且是时区的唯一标识符。在
    DYNAMIC\u TIME\u ZONE\u INFORMATION
    结构中,它对应于
    TimeZoneKeyName
    字段。在.NET中,它对应于
    TimeZoneInfo.Id
    。还请记住,虽然键通常与标准名称的英文形式匹配,但也有一些例外情况不匹配。此外,特定键的名称保证永远不会更改,而其下的本地化值在理论上可能会更改

在这里,您可以看到Windows控制面板中显示名称的英文和中文外观。标准名称和日光名称也会出现类似的本地化:


最后,我认为这些名字在很多情况下都是垃圾。例如,没有“GMT夏令时”这样的东西——它实际上被称为“英国夏令时”。本地化时区名称的唯一好来源是,您可以直接使用,也可以通过C和Java中的库或my library for.NET中的库来使用。

回答得很好。错过了GetTimeZoneInformation底部的一行。微软决定翻译所有的字符串似乎有些奇怪,特别是因为这个结构对于用户界面来说是不可见的。谢谢你的帮助。