0
Как конвертировать часовые пояса с помощью Win32 API?
У меня есть строки даты, такие как 2009-02-28 15:40:05 AEDST, и я хочу преобразовать их в структуру SYSTEMTIME. Пока у меня есть:
SYSTEMTIME st;
FILETIME ft;
SecureZeroMemory(&st, sizeof(st));
sscanf_s(contents, "%u-%u-%u %u:%u:%u",
&st.wYear,
&st.wMonth,
&st.wDay,
&st.wHour,
&st.wMinute,
&st.wSecond);
// Timezone correction
SystemTimeToFileTime(&st, &ft);
LocalFileTimeToFileTime(&ft, &ft);
FileTimeToSystemTime(&ft, &st);
Однако мой местный часовой пояс не AEDST. Поэтому мне нужно указать часовой пояс при преобразовании в UTC.
Ответов (2)2
Решение
0
Взгляните на это:
// 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 );
Вопрос: как получить TIME_TIMEZONE_INFORMATION для определенного часового пояса?
К сожалению, вы не можете этого сделать с помощью Win32 API. Обратитесь к MSDN и как мне получить определенную структуру TIME_ZONE_INFORMATION в Win32?
Вам нужно будет либо создать пустую переменную и заполнить ее вручную, либо использовать стандартную временную библиотеку C.
0
Вы смотрели TzSpecificLocalTimeToSystemTime
Win32 API?