2016-04-13 5 views
1

Ich habe eine ältere Windows-Anwendung, die Daten aus einer Datenbank liest. Eine der Spalten ist 'TimeZoneInfoId'. Was in der Legacy-Welt von einer anderen Windows-Anwendung geschrieben wurde, so speichert es die Windows-Zeichenfolge: TimeZoneInfo.CurrentTimeZone.StandardNameGibt es eine Java-Bibliothek, die Olsen-Zeitzonen-IDs zu Windows-Zeitzonen-IDs konvertiert

Ich muss jetzt in dieser Tabelle aus einer Java-Anwendung schreiben. Ich versuche also, eine Bibliothek zu finden, die eine Zeitzonen-ID von der (früher als Olson-Datenbank bekannt) der Windows-Zeitzonen-ID zuordnet. Idealerweise würde ich gerne eine Bibliothek verwenden, die ich theoretisch später auf spätere Versionen aktualisieren könnte, da ich gelesen habe, dass sich die Zeitzoneninformationen manchmal ändern können.

Ich habe bereits ein wenig online gesucht, und die Antworten, die ich gefunden habe, sagen entweder eigene Mapping/Lookup schreiben oder NodaTime verwenden und die Konvertierung in. NET (wenn Sie wirklich eine Bibliothek benötigen, die aktualisiert werden kann).

Ich kann den Legacy-Code nicht aktualisieren (ohne ein komplettes Umschreiben), also stelle nur die Frage hier, da die meisten Antworten, die ich gefunden habe, etwas alt sind, vielleicht gibt es etwas Neues, das ich nutzen kann ;)

Wenn nicht muss es eine benutzerdefinierte Lookup-Funktion I hfea sein.

Antwort

0

Nun, vorausgesetzt, Sie meinten, der Wert kam von TimeZoneInfo.Local.Id, dann können Sie diese Konvertierung durchführen. Wenn es von TimeZone.CurrentTimeZone.StandardName kam, dann wird es einige Einträge, die scheitern, weil StandardName eine lokalisierte Zeichenfolge ist, und die englische Form entspricht nicht unbedingt den Id

auf Ihre Frage bekommen, könnten Sie am source XML data in CLDR anschauen, und parse es ähnlich wie how I described here.

Oder, wenn Sie wirklich eine Bibliothek möchten, beachten Sie, dass ICU4J die Methoden getWindowsId und getIDForWindowsID verwendet, die dieselben Daten für die Konvertierung verwenden. ICU kann jedoch sehr groß sein, wenn Sie es nur für diese eine Sache brauchen, dann sollten Sie besser direkt zum XML gehen.

+0

Danke! Einige gute Infos dort. ICU4J scheint genau die Methode zu haben, die ich brauche. Aber wie du sagst, ist es ziemlich groß für genau diesen Scheck. Ich denke, ich werde versuchen, die XML-Dateien verwenden - die in meinem Quellcode-Steuerelement aktualisiert werden können, im Wesentlichen die gleiche Funktionalität wie ein Upgrade einer Bibliothek :) – procke

+0

Auch erwähnenswert: Unter Windows, Java [behalten ihre eigenen Mappings] (https : //docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/time-zone002.html#CBBCCFCD), in ' \ lib \ tzmappings'. Ich bin jedoch unsicher, ob es eine API gibt, um diese direkt verfügbar zu machen, oder ob sie in Nicht-Windows-Installationen verfügbar ist. Es dient hauptsächlich zur Bestimmung der System-Standardzeitzone. –