Wissen Sie, ob eine API für diese Überprüfung existiert?Routine zur Überprüfung, ob ein bestimmtes Datum im Sommer oder im Winter ist
Antwort
GetTimeZoneInformation ist, was Sie brauchen.
Sie können es aufrufen und den zurückgegebenen Wert prüfen, um festzustellen, ob die Sommerzeit zum Zeitpunkt des Anrufs aktiviert ist. Es füllt auch eine Struktur, die Regeln für die Umstellung auf Sommer- und Sommerzeit enthält. Wenn diese Struktur gefüllt ist und jede Zeit im UTC-Format angegeben wird, kann relativ einfach berechnet werden, ob diese Zeit der Sommerzeit oder der Standardzeit entspricht.
Alles schön und gut, aber GetTimeZoneInformation und GetDynamicTimeZoneInformation nur geben die aktuellen Einstellungen Zeitzone. Was ist, wenn die aktuelle TZ (d. H. Wo mein Server lebt) nicht die TZ ist, die ich überprüfen möchte?
Sagen wir, dass ich eine Server-App habe, die Bücher für die Kasse reserviert. Sie können sagen "Ich möchte es jetzt überprüfen" oder "Ich werde es in Zukunft bei datetime überprüfen müssen". Checkout-Zeiten werden in der lokalen Zeit des Benutzers eingegeben und vor dem Speichern in UTC konvertiert. Wenn der Benutzer seine Liste mit den Kassen ausgibt, werden die Zeiten für die Anzeige zurück in ihre lokalen Werte konvertiert.
Nehmen Sie an, dass der Server in New York lebt und unter Standard-DST-Regeln für die USA nach 2007 arbeitet. Die Zeitzone ist auf Ost-USA eingestellt, und es ist derzeit 27.07.2009 15:30 Uhr, also ist DST ON.
Benutzer in New York geben lokale Daten und Uhrzeiten ein. Konvertieren von ET nach UTC - kein Problem. Sie geben ein zukünftiges Datum ein - gut. Ich benutze einen der obigen zwei API-Aufrufe und finde es heraus.
Allerdings möchte ein Benutzer in Sydney eine Kasse reservieren. Sie fordert einen Checkout am 13.12.2009 18:25 Uhr bezüglich ihrer lokalen Zeitzone in Sydney an. Ich kann meine lokale TZ-Info nicht verwenden - Sydney und NY folgen nicht den gleichen DST-Regeln. Wie kann ich Sydneys aktuelle TZ-Informationen laden und herausfinden, ob ein beliebiges Datum DST ist oder nicht?
Es gibt einige neuere (aber immer noch unvollständige) Methoden auf MS-Windows für Win7 und Server2008/R2. Siehe KB 2731771. Siehe auch ICU und Boost :: locale. Die Windows-Routinen (GetTimeZoneInformationForYear) erfordern, dass Sie Ihre UTC soweit konvertiert haben, dass Sie das Jahr auf ein Minimum reduzieren. Glücklicherweise verschieben sich um den 1. Januar keine Zeitzonen, die mir bekannt sind. Sie können SystemTimeToTzSpecificLocalTime (Ex) verwenden, um die lokale Zeit korrekt in eine Zeitzone zu konvertieren, die sich von der Zeitzone des lokalen Systems unterscheidet. Ohne diese Methoden müssen Sie die Registrierung scannen, um die richtigen Zeitzoneninformationen und dynamischen Informationen zu laden, und dann SystemTimeToTzSpecificLocalTime aufrufen. Seien Sie vorsichtig mit Dingen wie _tzset und localtime, da einige Systeme (wie Windows) viele (meistens falsche) Dinge wie die US-DST-Regeln annehmen, selbst wenn Ihre TZ-Einstellungen für Australien sind.
Sie würden denken, dass sowohl Windows als auch Linux einige ziemlich standardmäßige Methoden wie UTCtoLocal (const char * tzName, time_t inTime, struct tm * outTime) unter Berücksichtigung aller dynamischen/historischen DST-Regeln für die Zeit haben Zone gegeben. tzName sollte in der Lage sein, den passenden Namen wie "Zentrale Standardzeit" oder "Amerika/Chicago" zu nehmen, abhängig davon, auf welchem System Sie laufen. Ich würde sogar bereit sein, einen Zwei-Ruf-Schritt wie GetTimeZoneInformation (const char * tzName, TIME_ZONE_INFORMATION * outTZInfo) UTCtoLocal (const TIME_ZONE_INFORMATION * inTZInfo, time_t inTime, struct tm * outTime) Sie wissen, das OS tut bereits Dies wird beim Laden der Systemzeitzoneninformationen und der lokalen/UTC-Konvertierungen der Bibliotheken verwendet.
- 1. Wie kann ich im Hintergrund überprüfen, ob ein bestimmtes Datum und Uhrzeit in Android erreicht ist
- 2. Überprüfen Sie, ob ein bestimmtes Datum vergangen ist
- 3. deaktivieren ein bestimmtes Datum des Tages im Android Datumsauswahl
- 4. Wie berechnet man, wenn ein bestimmtes Datum das Datum von heute oder oder das Datum von gestern ist?
- 5. Hinzufügen von Interrupt-Service-Routine im Kernel
- 6. Was wäre der pythonische Weg herauszufinden, ob ein bestimmtes Datum zur aktuellen Woche gehört?
- 7. Datum auf tbd setzen, wenn es ein bestimmtes Datum ist
- 8. herauszufinden, ob Python-Modul installiert ist oder im Entwicklungsmodus programmgesteuert
- 9. Prüfen, ob ein Punkt im Ansichtsfenster ist
- 10. Javascript im Leerlauf Besucher Überprüfung
- 11. Hilfe zur Überprüfung, ob mein XML-Validierungscode effizient ist
- 12. Überprüfung, ob Datenbankwiederherstellung abgeschlossen ist
- 13. Überprüfen, ob ein bestimmtes Datum zwischen einem Datumsbereich passt
- 14. System.currentTimeMillis() für ein bestimmtes Datum?
- 15. Ist diese Überprüfung für ein Datumsfeld korrekt?
- 16. Überprüfen, ob ein Datum größer als das angegebene Datum ist
- 17. Ansicht ändern, nachdem ein bestimmtes Datum abgelaufen ist
- 18. Überprüfen Sie, ob NSDate ein Datum enthält oder leer ist
- 19. Suchen, ob ein bestimmtes Datum in einer Liste von Datumsbereichen ist
- 20. Überprüfen Sie, ob das Datum dieses Datum oder größer ist
- 21. Ich muss ein Datum im String-Format in ein aktuelles Datum um zu überprüfen, ob es Freitag ist
- 22. Überprüfen, ob der PC im LAN verbunden ist oder nicht
- 23. Pandas: überprüfen, ob ein Element im Dataframe ist oder eine Spalte führt zu seltsamen Ergebnissen
- 24. Regex überprüft, ob die Zeichenfolge im Format "JJJJ/MM/TT" ein gültiges Datum ist, einschließlich Monatsgrenzen
- 25. wie ein bestimmtes Datum von heute vergleichen
- 26. Überprüfen, ob ein Div im Viewport mit jQuery sichtbar ist
- 27. Post-loading: Überprüfen, ob ein Bild im Browser-Cache ist
- 28. Datengröße im Speicher im Vergleich zur Festplatte
- 29. Wie erkennt man, ob ein bestimmtes Laufwerk eine Festplatte ist?
- 30. Was ist ein virtuelles Dateisystem oder ein Dateisystem im Benutzerbereich?
Gibt es irgendein Linux-Äquivalent?Oder besser eine Lib, die es einkapseln? Ich überprüfe Boost;) – neuro
Seien Sie vorsichtig, wenn Sie historische Änderungen an den Übergangsdaten berücksichtigen möchten. Z.B. Die USA und Australien haben kürzlich die Daten geändert, als sie zwischen Sommerzeit und Normalzeit wechseln, und ein bestimmter Zeitstempel aus 2003 lebt unter anderen Regeln als ein bestimmter Zeitstempel aus 2008. –
Boost hat Boost.Date_Time [1], enthält a Zeitzonendatenbank, unter anderem. Ich habe es nicht benutzt, also kann ich nicht für seine Qualität bürgen. [1] http://www.boost.org/doc/libs/1_39_0/doc/html/date_time.html –