我正在努力:
我正在通过阅读注册表中的“CurrentVersion \ Time Zones”部分来做到这一点。
我可以使用GetTimeZoneInformation()获取当前时区,但名称与从注册表的“CurrentVersion \ Time Zones”部分检索的时区列表不匹配。例如,太平洋时间在时区列表中显示为“(UTC-08:00)太平洋时间(美国和加拿大)”,但GetTimeZoneInformation()包含字符串“太平洋标准时间”和“太平洋夏令时”。我需要找到一个与“CurrentVersion \ Time Zones”名称相对应的名称,以便我可以从列表中选择它。
我可以在timeZoneInformation.Bias中检索UTC的偏移量,但这仅适用于当前选定的时区。我需要知道注册表中列出的任何区域的“偏见”(例如,“(UC-07:00)Mountain Time(美国和加拿大)”),同时调整夏令时的效果。
答案 0 :(得分:4)
Microsoft选择将您想要的字符串放在不同的区域,有些字符串非常容易检索。但是你的部分问题可以用你已经掌握的信息来回答。
在 CurrentVersion \ Time Zones 中,是区域的名称。 内部该键是您想要的某些部分的值。
re:“(UTC-08:00)太平洋时间(美国和加拿大)”
这是您所拥有的区域名称下的注册表值“显示”。
资源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 和 theBias 是偏置+标准偏差或偏差+ DaylightBias 取决于相关日期。两个 SYSTEMTIME 值描述了转换日期。
答案 1 :(得分:1)
TimeZoneInfo.Bias
TIME_ZONE_INFORMATION结构 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx
SetTimeZoneInformation函数 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms724944(v=vs.85).aspx
// Get the local system time.
SYSTEMTIME LocalTime = { 0 };
GetSystemTime( &LocalTime );
// Get the timezone info.
TIME_ZONE_INFORMATION TimeZoneInfo;
GetTimeZoneInformation( &TimeZoneInfo );
// Convert local time to UTC.
SYSTEMTIME GmtTime = { 0 };
TzSpecificLocalTimeToSystemTime( &TimeZoneInfo,
&LocalTime,
&GmtTime );
// GMT = LocalTime + TimeZoneInfo.Bias
// TimeZoneInfo.Bias is the difference between local time
// and GMT in minutes.
// Local time expressed in terms of GMT bias.
float TimeZoneDifference = -( float(TimeZoneInfo.Bias) / 60 );
CString csLocalTimeInGmt;
csLocalTimeInGmt.Format( _T("%ld:%ld:%ld + %2.1f Hrs"),
GmtTime.wHour,
GmtTime.wMinute,
GmtTime.wSecond,
TimeZoneDifference );
TimeZoneInfo类 - http://msdn.microsoft.com/en-us/library/bb396389 确定夏令时 - http://www.metatrader4.com/forum/2155