How to convert between timezones with win32 API?

前端 未结 2 836
感动是毒
感动是毒 2021-01-05 19:27

I have date strings such as 2009-02-28 15:40:05 AEDST and want to convert it into SYSTEMTIME structure. So far I have:

SYSTEMTIME st;
FILETIME ft;
S         


        
相关标签:
2条回答
  • 2021-01-05 19:45

    Have you looked at the TzSpecificLocalTimeToSystemTime Win32 API?

    0 讨论(0)
  • 2021-01-05 19:55

    Take a look at this:

    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 );
    

    Question: How do you get the TIME_TIMEZONE_INFORMATION for a specific timezone?

    Well unfortunately you cannot do that with the win32 API. Refer to MSDN and How do I get a specific TIME_ZONE_INFORMATION struct in Win32?

    You will either need to create an empty variable and fill it in manually, or use the standard C time library.

    0 讨论(0)
提交回复
热议问题