gpt4 book ai didi

c++ - 获取 Windows 时区信息 (C++/MFC)

转载 作者:可可西里 更新时间:2023-11-01 14:06:13 26 4
gpt4 key购买 nike

我正在尝试:

  1. 获取当用户从 Windows 控制面板中选择时区时出现的时区名称列表(例如,“(UTC-08:00) 太平洋时间(美国和加拿大)”)。

我通过阅读注册表的“CurrentVersion\Time Zones”部分来做到这一点。

  1. 获取当前选择的时区作为字符串。

我可以使用 GetTimeZoneInformation() 获取当前时区,但名称与从注册表的“CurrentVersion\Time Zones”部分检索到的时区列表不匹配。例如,太平洋时间在时区列表中显示为“(UTC-08:00) Pacific Time (US & Canada)”,但 GetTimeZoneInformation() 包含字符串“Pacific Standard Time”和“Pacific Daylight Time”。我需要找到一个与“CurrentVersion\Time Zones”名称相对应的名称,以便我可以从列表中选择它。

  1. 根据字符串名称获取 UTC 与任何其他时区之间的当前偏移量(以分钟为单位)。

我可以在 timeZoneInformation.Bias 中检索 UTC 的偏移量,但这仅适用于当前选定的时区。我需要了解注册表中列出的任何区域的“偏差”(例如,“(UC-07:00) 山区时间(美国和加拿大)”,同时根据夏令时进行调整(如果有效)。

最佳答案

Microsoft 选择将您想要的字符串放在不同的区域,有些字符串很难检索。但是您的部分问题可以用您已有的信息来回答。

CurrentVersion\Time Zones 中,yes 是区域的名称。里面那个键是你想要的一些部分的值。

回复:“(UTC-08:00) 太平洋时间(美国和加拿大)”

这是在您拥有的区域名称下的注册表值“Display”中。

资源 DLL 中有更多字符串,由值“MUI_Display”、“MUI_Std”和“MUI_Dlt”指定。它通常类似于 "@tzres.dll,-220"

要获取这些字符串,您需要将该资源 DLL 加载到内存中,并将这些特定资源作为 UNICODE 字符串获取。

re: 任何时区的偏移量。

在您拥有的注册表项(时区名称)中还有一个名为 "TZI" 的值。这是一个二进制 blob(根据 MSDN)如下所示:

typedef struct _REG_TZI_FORMAT
{
LONG Bias;
LONG StandardBias;
LONG DaylightBias;
SYSTEMTIME StandardDate;
SYSTEMTIME DaylightDate;
} REG_TZI_FORMAT;

如果各种 BIAS 以分钟为单位,则使用等式 UTC = local + theBias 并且 theBiasBias + StandardBiasBias + DaylightBias 取决于相关日期。两个 SYSTEMTIME 值描述了转换日期。

关于c++ - 获取 Windows 时区信息 (C++/MFC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com