首页 > 解决方案 > 在非英语 Windows 安装上识别 PST 时区

问题描述

我正面临这个奇怪的问题,我需要从日本 Windows 操作系统机器上获取 PST 时区信息(例如 MUI_Std、Std、TZI 等),但找不到可靠的方法。

我已经尝试过 RegLoadMUIStringW API。但它以本地化格式返回 PST 时区的名称。我有英文的 PST 时区名称。因此,使用此 API 的输出,我无法比较并判断从注册表读取的值是否适用于 PST 时区。

一种可能的解决方案是在代码中使用 PST 时区的 MUI_Std 值(该值为 @tzres.dll,-212),并将该值与从注册表读取的值进行比较。这样我就会知道我正在阅读的时区是否是 PST。但我不确定这是否是检测 PST 时区的可靠方法。

让我知道是否有人对此有任何意见。

标签: c++windowstimezone

解决方案


时区由它们的 ID(又称“键名”)标识,而不是它们的本地化名称。ID 未本地化。

因此,无论操作系统的语言如何,您都可以在以下位置找到太平洋时区信息:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time

在其中的值中,只有StdDltDisplay值是本地化的,并且 MUI 值指向这些字符串在资源文件中的位置。资源文件随 Windows 语言包一起安装。请注意,您不应该硬编码一个值(例如,-212),因为未来的更新可能会提供一个可以更改它的新字符串。

此外,如果您只需要检索给定 ID 的时区信息,您实际上根本不需要访问注册表。只需使用该EnumDynamicTimeZoneInformation函数遍历时区,寻找与所需匹配的时区TimeZoneKeyName(同样未本地化)。

但是,如果您正在寻找当前操作系统语言以外的语言的本地化,您可以尝试查看TimeZoneWindowsResourceExtractor项目。


推荐阅读