如何使用win32 API在时区之间进行转换?

我有datestring,如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时指定时区。

Solutions Collecting From Web of "如何使用win32 API在时区之间进行转换?"

看看这个:

https://web.archive.org/web/20140205072348/http://weseetips.com:80/2008/05/28/how-to-convert-local-system-time-to-utc-or-gmt/

  // 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以及如何在Win32中获取特定的TIME_ZONE_INFORMATION结构?

您将需要创建一个空的变量并手动填写它,或使用标准的C时间库。

你看过TzSpecificLocalTimeToSystemTime Win32 API吗?