2016-06-21 9 views
0

Ich verwende das grundlegende Java-Format von zzz in Android, um die Zeitzone angehängt zu bekommen. Bitte finden Sie den Code untenDrei-Buchstaben-Zeitzone IDs inkonsistent in Android

public static final String DISPLAY_DATE_FORMAT = "MMMM dd, yyyy 'at' hh:mm:ss a zzz";  
SimpleDateFormat formatter = new SimpleDateFormat(
        DISPLAY_DATE_FORMAT); 
formatter.setTimeZone(timeZone); 
date = formatter.format(formattedDateTime); 

So das Ergebnis, das ich sowohl in der platfrom bekommen habe ist

In Version 6.0.1 es zeigt GMT-04: 00 und in 5.1.1 als EST die ist irgendwie komisch.

Ich habe auch versucht

timeZone.getDisplayName(timeZone.inDaylightTime(formattedDateTime),TimeZone.SHORT); 

und bekam das gleiche Ergebnis mit dem folgenden Code. Gibt es einen Weg, ich kann die EST anstelle der GMT-Werte erhalten. Ich weiß, dass diese Methode nach Orakel entzogen ist, aber gibt es eine Möglichkeit, die Timecode-ID mit drei Buchstaben zu erhalten.

+0

Siehe: http://stackoverflow.com/questions/2807197/get-three-letter-short-timezone-name-as-oppe-posed-to-four-letter –

Antwort

0

Die 3-4-Buchstaben-Abkürzungen, wie sie häufig in den Mainstream-Medien zu finden sind, sind keine echten Zeitzonen. Sie sind nicht standardisiert. Sie sind nicht einmal einzigartig!

Moderne Datum-Zeit-Bibliotheken verzichten auf diese Abkürzungen und verwenden stattdessen die richtigen Zeitzonennamen.

Siehe this list of proper time zone names. Sie sind in einem Format von continent/region. Zum Beispiel America/Montreal und Asia/Kolkata.

2016-06-11T12: 34,56-07: 00 [America/Los_Angeles]

Sie verwenden alt Datum-Zeit-Klassen, die notorisch schwierig und schlecht konzipiert sind. Sie wurden durch das java.time-Framework ersetzt, das in Java 8 und höher integriert ist. Ein Großteil der java.time-Funktionalität ist auf Java 6 & 7 (ThreeTen-Backport) zurück portiert und weiter an Android (ThreeTenABP) angepasst.