Ich habe support for Windows zones in meinem Java-Bibliothek Time4J umgesetzt. Die letzte Version v4.2 ist auch interoperable with Java-8, so dass es einfach ist, alle grundlegenden Time4J-Typen in java.time
-Äquivalente zu konvertieren. Zum Beispiel erkennt Windows-Zonen als Strings möglich ist, sowie bei der Analyse des bei der Konstruktion:
// conversion Windows to IANA
WindowsZone wzn = WindowsZone.of("Eastern Standard Time");
TZID winzone = wzn.resolveSmart(Locale.US);
System.out.println(winzone.canonical()); // WINDOWS~America/New_York
// usage in timezone calculation
Timezone tz = Timezone.of(winzone);
System.out.println(Moment.UNIX_EPOCH.toZonalTimestamp(winzone)); // 1969-12-31T19
// usage in parsing and formatting
ChronoFormatter<Moment> f =
ChronoFormatter.ofMomentPattern(
"MM/dd/uuuu hh:mm a zzzz", PatternType.CLDR, Locale.US, winzone);
Moment pacificTime = f.parse("07/17/2015 02:45 PM Pacific Standard Time");
System.out.println(f.format(pacificTime)); // 07/17/2015 05:45 PM Eastern Standard Time
Wie Sie sehen können, eine locale Informationen eine Windows-Zone zur Karte wie „Eastern Standard Time“ zu einem Olson/IANA notwendig sind -ID wie "Amerika/New_York". Die zugrunde liegenden Daten und Mapping-Informationen stammen aus CLDR.
Der umgekehrte Weg von der IANA auf Windows könnte diese einfache Art und Weise erfolgen:
String iana = "America/New_York";
String winzone = "WINDOWS~" + iana;
NameStyle dummy = NameStyle.LONG_STANDARD_TIME; // does not really matter
String name = Timezone.of(winzone).getDisplayName(dummy, Locale.US);
System.out.println(name); // Eastern Standard Time
jedoch eine sehr vereinfachte Teilmenge von Zeitzonen diese umgekehrte Umwandlung funktionieren könnte nicht nur für alle IANA-Identifikatoren, da Windows unterstützt im Vergleich zu IANA-TZDB. Ich denke auch, dass der umgekehrte Weg in der Praxis kaum genutzt wird. Benutzer sollten lieber mit IANA-Zeitzonen arbeiten und nur Windows-Zeitzonen verwenden, wenn dies die (unvermeidliche) Eingabe ist (siehe ersten Teil meiner Antwort).
Es gibt bereits https://code.google.com/p/java-time-zone-list, aber das ist ein paar Jahre alt - ich vermute, es hat nicht das neue CLDR-Format für Windows-Zeitzonen genommen. Aber im Grunde wollen Sie das - die Daten von CLDR. –
Möglicherweise müssen Sie dies selbst schreiben, indem Sie eine ähnliche Logik direkt mit den CLDR-Daten vergleichen. –