我正在编写一个软件,允许更改 Windows 中使用的当前时区参数:
到目前为止,我发现的设置系统范围时区的唯一参考是API(或其变体SetDynamicTimeZoneInformation
.)但我不太确定如何使用它来更改当前时区?
例如,需要包含有关本地时间偏移、夏令时设置等各种信息的结构。我不明白为什么我需要填写所有这些信息,而我只想将当前时区从"(UTC-08:00) Pacific Time (US & Canada)"
to "(UTC-07:00) Mountain Time (US & Canada)"
.
我是否正在寻找正确的 API 来执行此操作?
已经有一段时间了,所以让我尝试回顾一下我最终做了什么。不幸的是我的解决方案是特定于操作系统的:
-
适用于 Windows Vista 及更高版本:
Set SE_TIME_ZONE_NAME
特权。
Call 通过指定要设置的时区的详细信息。
Remove SE_TIME_ZONE_NAME
特权。
-
对于 Windows XP:
Set SE_SYSTEMTIME_NAME
特权。
Call 包含有关要设置的时区的信息。
Reset SE_SYSTEMTIME_NAME
特权回来了。
最后,对于两个操作系统,广播以下消息,让正在运行的应用程序知道时区已更改:
::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"intl",
SMTO_ABORTIFHUNG,
2 * 1000, //the total wait time can be up to the value of uTimeout multiplied by the number of top-level windows.
NULL);
附言。要获取有关当前时区的信息,请使用GetDynamicTimeZoneInformation
or GetTimeZoneInformation
对于WinXP。
此外,您可能需要检索所有可用时区的列表,您可以使用它来选择新(默认)时区的信息。您可以通过枚举/解析以下注册表项来获取它:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Check and here https://blogs.msdn.microsoft.com/bclteam/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free/有关其结构的信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)