5 Stimmen

Wie konvertiert man zwischen Zeitzonen mit win32 API?

Ich habe Datumszeichenfolgen wie 2009-02-28 15:40:05 AEDST und möchte sie in eine SYSTEMTIME-Struktur umwandeln. Bis jetzt habe ich:

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

Meine lokale Zeitzone ist jedoch nicht AEDST. Ich muss also in der Lage sein, die Zeitzone bei der Konvertierung in UTC anzugeben.

6voto

uzbones Punkte 1402

Schauen Sie sich das an:

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

Frage: Wie erhält man die TIME_TIMEZONE_INFORMATION für eine bestimmte Zeitzone?

Leider kann man das mit der Win32-API nicht machen. Siehe MSDN y Wie erhalte ich eine bestimmte TIME_ZONE_INFORMATION-Struktur in Win32?

Sie müssen entweder eine leere Variable erstellen und diese manuell ausfüllen oder die Standard-C-Zeitbibliothek verwenden.

0 Stimmen

Nun, leider kann man das nicht mit der Win32-API machen... siehe msdn.microsoft.com/de-us/library/ms725481(VS.85).aspx Sie müssen entweder eine leere Variable erstellen und sie manuell ausfüllen oder die Standard-C-Zeitbibliothek verwenden.

0 Stimmen

0 Stimmen

Dies erfordert ebenfalls XP oder höher. TzSpecificLocalTimeToSystemTime funktioniert nicht unter Win2k

0voto

Franci Penov Punkte 73239

Haben Sie sich die TzSpecificLocalTimeToSystemTime Win32-API?

3 Stimmen

Danke dafür, aber wie kann ich die TIME_ZONE_INFORMATION für eine andere Zeitzone (z. B. AEDST) abrufen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X