Ich muss einer Datenbank-Tabelle mit benutzergepflegten Standorten Zeitzoneninformationen hinzufügen. Auf die Daten wird hauptsächlich über Java-Code zugegriffen, aber es gibt auch einige PL/SQL- und Win32 (Delphi)-Codes, die die Zeitzoneninformationen verstehen müssen.
Es scheint einfach zu sein, die ID von java.util.TimeZone zu verwenden. Java kann das (offensichtlich) leicht konvertieren, Hibernate hat integrierte Unterstützung dafür und anscheinend versteht auch Oracle diese Zeitzonen-IDs:
select TZ_OFFSET('Pacific/Marquesas') from dual.
Das Problem ist: Die Zeitzonen-IDs scheinen nicht mit der Windows-Zeitzonen-DB kompatibel zu sein. Zum Beispiel ist die java.util.timezone id "Pacific/Marquesas" (-09:30) nicht in der Zeitzonen-Auswahlliste von Windows enthalten. Die Registry enthält sie überhaupt nicht; siehe
\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones
Hier kann ich nur entweder -09:00 oder -10:00 wählen. Wenn ich also die Zeitzone so speichere, wie komme ich dann an die tatsächlichen Offset/DST-Informationen in Windows (ohne Java)? Hoffentlich ist dafür keine Zuordnungstabelle erforderlich, die ich bei jeder Änderung auf dem Laufenden halten muss. Gibt es einen weltweit akzeptierten Standard, der besser funktioniert als die Java-Zeitzonen-ID?
Update
Die Zeitzoneninformation wird in Kombination mit DATE-Spalten in der Datenbank verwendet. Diese Spalten enthalten lokale Datums-/Zeitwerte. Wenn diesen Werten ein Ort zugeordnet werden kann, ermöglicht mir die Zeitzone des Ortes, den Datums-/Zeitwert bei Bedarf in UTC oder eine andere Zeitzone zu konvertieren.
Mir ist klar, dass anstelle von DATE ein TIMESTAMP_TZ-Datentyp oder etwas Ähnliches besser geeignet wäre. Dies würde jedoch eine Datenmigration erfordern (für die wiederum die TZ benötigt wird) und wird von den Altanwendungen, die ebenfalls mit den Daten arbeiten, nicht unterstützt (es sei denn, es wird eine Menge Code geändert). Das Problem ist fast dasselbe, wenn ich die Werte in UTC konvertieren müsste.
Unterm Strich muss ich die DATE-Werte in Ortszeit halten, aber ich muss für einige von ihnen wissen, welche TZ das bedeutet.
0 Stimmen
Vielleicht muss man eine andere Sprache/Locale von Windows haben, damit etwas wie Marquesas eine gute Wahl ist? Sicherlich würde Microsoft die Menschen in den dazwischen liegenden Zeitzonen nicht so ausnutzen...
0 Stimmen
So scheint es nicht zu funktionieren. Ich würde sagen, dass Windows immer alle Zeitzonen in der Registrierung hat (zumindest die, die es unterstützt). Die Sprache/das Gebietsschema kann die Zeitzone nicht ausreichend bestimmen - vor allem bei der heutigen mobilen Datenverarbeitung.