Następujące podejście zadziałało.
import java.util.Set;
import java.util.TimeZone;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");
for (String zoneId : zoneIds) {
String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
String longName = TimeZone.getTimeZone(zoneId).getDisplayName();
System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}
Mogą istnieć inne i prawdopodobnie lepsze sposoby, o których teraz nie wiem.
Albo
import java.util.Set;
import org.joda.time.DateTimeUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");
for (String zoneId : zoneIds) {
String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
String longName = DateTimeZone.forID(zoneId).getName(DateTimeUtils.currentTimeMillis());
System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}
Greenwich Mean Time (Etc/GMT+0
, na przykład), to wyświetla na przykład +00:00
zamiast wyświetlania GMT+00:00
jak w pierwszym przypadku.
Jeżeli nazwa nie jest dostępna dla lokalizacji, to metoda ta (public final String getName(long instant)
) zwraca ciąg w formacie - [+] HH: MM.
Odpowiedni Locale
można również stosować, w razie potrzeby przy użyciu przeciążone metody
public String getName(long instant, Locale locale)
krótkich nazw, na przykład UTC dla Coordinated Universal Time mogą być wyświetlane w następujący sposób.
import java.util.Set;
import org.joda.time.DateTimeUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
Set<String> zoneIds = DateTimeZone.getAvailableIDs();
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("ZZ");
for (String zoneId : zoneIds) {
String offset = dateTimeFormatter.withZone(DateTimeZone.forID(zoneId)).print(0);
String shortName = DateTimeZone.forID(zoneId).getShortName(DateTimeUtils.currentTimeMillis());
System.out.println("(" + offset + ") " + zoneId + ", " + shortName);
}
Przy odpowiednim Locale
, w razie potrzeby stosując metodę przeciążenia
public String getShortName(long instant, Locale locale)
Update:
Użycie Java Time API Java SE 8, w którym jest dalej uproszczony .
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.Locale;
import java.util.Set;
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
for (String zoneId : zoneIds) {
ZoneId zone = ZoneId.of(zoneId);
ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);
ZoneOffset offset = zonedDateTime.getOffset();
String longName = zone.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println("(" + offset + ") " + zoneId + ", " + longName);
}
Nazwa wyświetlana ma różne style dostępne w java.time.format.TextStyle
. Na przykład skróty mogą być wyświetlane za pomocą TextStyle.SHORT
.
wyświetli długie nazwy, takie jak "India Time". To jednak nie jest pełne imię, w przeciwieństwie do czasu Jody.
Poniżej zostanie wyświetlona pełna nazwa tego imienia, np. "Indyjski czas standardowy" (jeśli dotyczy).
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
Poniższa wyświetli strefa-przesunięcie danej strefie jak GMT+05:30
(Uwaga kapitalizacji wzorca).
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("ZZZZ");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
Poniżej przedstawiono do wyświetlania skrótów.
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
Capital ZZZ
dla strefy offsetu jak +0530
, +0000
.
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html