我正在尝试使用Windows API并按照documentation更改Windows 10上的时区。我正在传递时区偏差,标准名称和日光名称,这些名称在注册表中肯定是公认的时区(“中欧标准时间”和“中欧夏令时”)。时钟被设置为正确的时间,但当我在控制面板中打开时区设置时,我看到消息Your current time zone is not recognized. Please select a valid time zone.
。当我点击Change time zone
按钮时,我看到我的时区在下拉菜单中被选中,但当我进入设置时,它没有显示。我怎样才能改变这一点或检查时区是否正确设置在某处注册表或东西?
1条答案
按热度按时间mpbci0fu1#
几件事:
SetTimeZoneInformation
,因为它不支持现代Windows中使用的完整的“动态”时区信息。使用SetDynamicTimeZoneInformation
代替。(文档在这方面有点误导,因为Windows Vista和更新版本都是如此,而不仅仅是Windows 7和8。SetTimeZoneInformation
文档中的示例。它具有关于时区偏差和DST信息的硬编码信息。这可不是个好主意相反,使用EnumDynamicTimeZoneInformation
函数在TimeZoneKeyName
字段中查找具有所需ID的区域。找到后,将该DYNAMIC_TIME_ZONE_INFORMATION
结构传递给SetDynamicTimeZoneInformation
函数以更改时区。"Central Europe Standard Time"
是时区的ID(密钥名称),并与以下英语本地化字符串相关联:"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"
"Central Europe Standard Time"
"Central Europe Daylight Time"
"Central Europe Daylight Time"
* 不是 * 时区ID。它只是一个本地化的人类可读字符串,表示夏令时生效时使用的时区名称。SetDynamicTimeZoneInformation
需要SE_TIME_ZONE_NAME
权限,您可能会发现使用/s
参数来执行TZUtil.exe
实用程序以按ID设置时区更容易。他已经有了这个特权。