2017-11-02 1 views
1

Ich habe eine Liste der Zeitzonen, die der Benutzer auswählen soll. Also, ich dachte, ich kann einfach java.time.ZoneId.getAvailableZoneIds() anrufen und die Methode getDisplayName auf ihnen verwenden. Daraus ergibt sich eine Menge von doppelten Einträgen wieLokalisierter Name der ZoneId ID

Mitteleuropäische Zeit

Auch wenn ich die Zeitzone hinzufügen versetzt sie nicht unqiue sind. Die ID einer ZoneId unterscheidet jedoch die Einträge Wie kann ich sie lokalisieren? Die IDs sind immer in Englisch wie

Europe/Rome

+0

Ich bezweifle, dass Sie können. Sie sollten eindeutige Kennungen sein. – shmosel

+0

@smossel, haben Sie eine Idee, wie Sie eine Zeitzonenauswahl für die Sprache des Benutzers treffen können? –

Antwort

4

Es ist möglich, eine lokalisierte Version von dem Anzeigenamen zu erhalten, indem getDisplayName auf einem ZoneId Instanz aufrufen. Das würde erfordern Iteration über das Ergebnis der getAvailableZoneIds():

ZoneId.getAvailableZoneIds().stream() 
     .map(ZoneId::of) 
     .map(zid -> zid.getDisplayName(TextStyle.FULL, Locale.GERMAN)) 
     .distinct() 
     .forEach(System.out::println); 

Notiere die TextStyle Argument die Größe jeder Zone Titel zu ändern und die .distinct() Methode einzigartige Ergebnisse zu erhalten.

+0

Ja, könnte ich das, aber erlaubt das wirklich dem Benutzer, die richtige Zeitzone auszuwählen? Ich meine, sind die Offsets für Zeitzonen mit demselben Anzeigenamen immer gleich? –

+1

@SteffenHarbich Ja Zeitzone Name ermöglicht die Auswahl der richtigen Zeitzone. Aber der Offset ändert sich zweimal im Jahr, wenn die Sommerzeit eingehalten wird. Aus diesem Grund benötigen Sie [Datum/Uhrzeit, um ZoneId in ZoneOffset zu konvertieren] (https://StackOverflow.com/q/32626733/1413133) –

+0

Ja, Sie müssen noch entscheiden, wie Sie mit 'ZoneId' umgehen wollen, die übersetzen zu dem gleichen Anzeigenamen in Ihrer Sprache. Ich denke eine Option ist, die ID nach jedem hinzuzufügen, zum Beispiel "Mitteleuropäische Zeit - Europa/Rom" und "Mitteleuropäische Zeit - Europa/Oslo". Nicht die schönste Lösung, aber ich denke, dass es für den Benutzer navigierbar sein sollte. –

Verwandte Themen