2009-08-11 15 views
4

Meine Anwendung konvertiert vergangene und aktuelle Daten von Ortszeit in UTC.Konvertieren von alten und neuen lokalen Zeiten in UTC unter Windows XP/Server 2003

Ich muss sicherstellen, dass ich zukünftige DST-Updates für Windows berücksichtigen werde, während die vergangenen Daten weiterhin korrekt verarbeitet werden.

Die Anwendung ist in C++ geschrieben und läuft auf Server 2003.

Optionen Ich recherchiert habe:

So ...

  • ... ist jemand anderes die rohe Registry-Lösung, dies zu tun?

  • ... weitere Vorschläge?

(edit: herausgefunden dst_calc_engine doesn't support DST updates)

Antwort

2

Ich denke, ich würde lieber GetTimeZoneInformationForYear und möglicherweise GetDynamicTimeZoneInformation basierend auf den Informationen in der Registrierung unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones implementieren.

Auf diese Weise wird Ihr Code Windows-Updates folgen und Sie können den Dirty Code für die tatsächliche Implementierung auf Up-Level-Plattformen auslagern.

Da Sie keine externe Datenbank verwenden möchten, sind keine anderen Optionen möglich.

+0

Ich mag die Idee, sie mit einer identischen Signatur zu ersetzen, so dass die native API ein Drop-in-Ersatz sein könnte, wenn wir zu Server 2008 wechseln. – mskfisher

+0

Es gibt (mindestens :) ein Risiko im Zusammenhang mit dieser Strategie. obwohl. Diese zwei Funktionen sind ziemlich neu - wenn Fehler in ihnen gefunden werden, und sie zusammen mit Zeitzonendaten in einem neuen Format aktualisiert werden, könnten Ihre Funktionen unterbrochen werden. Es scheint nicht sehr wahrscheinlich, aber es ist immer ein Risiko bei der Verwendung von "Under-the-API" -Daten, wie die Registry-Unterstützung für die Zeitzone Info. –

+0

@ KimGräsman Haben Sie Ihre Lösung irgendwo veröffentlicht? – kol

0

Sie könnten gmtime() und localtime() für einen Zeitraum in 2007 verwenden und später (und von Windows DST-Updates Vorteil nehmen), und verwenden Sie Boost-oder ein von den anderen Lösungen, die Sie erwähnten, um die richtigen DST-Regeln für 2006 und früher zu verwenden.

+0

Leider berücksichtigen gmtime() und localtime() nur die aktuellen DST-Einstellungen. Wenn die Windows-DST-Methoden in 20xx aktualisiert werden, sind gmtime() und localtime() für Daten zwischen 2007 und 20xx ungültig. Ich habe die Frage aktualisiert, um dies zu beachten. – mskfisher

+0

Bummer!Ja, das bringt Sie in eine schwierige Situation - Sie wollen einige Aspekte der Windows-DST-Updates, aber nicht andere. Ich habe dann keine Ideen mehr - ich hoffe, du findest etwas, das für dich funktioniert. –