次のアプローチが有効でした。
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);
}
私が現在気付いていない他の、おそらくより良い方法があるかもしれません。
または
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);
}
(例えばEtc/GMT+0
)グリニッジ標準時の場合、それは代わりに、最初の場合と同様に、GMT+00:00
表示例+00:00
ため、表示します。
名ロケールのために利用可能でない場合、このメソッド(public final String getName(long instant)
)は 形式[+ - ]の文字列を返しHH:MMを。
必要に応じて適切なLocale
にも次のように協定世界時のための一例のUTCのため
public String getName(long instant, Locale locale)
ショート名が、表示することができ、オーバーロードされたメソッドを使用して、使用することができます。
適切
Locale
で
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);
}
に、オーバーロードされた方法を使用して、必要に応じて、
public String getShortName(long instant, Locale locale)
更新:これはさらに簡略化されたJavaのSE 8にJava Time APIを使用
。
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);
}
表示名には、java.time.format.TextStyle
で利用可能なさまざまなスタイルがあります。たとえば、略語はTextStyle.SHORT
を使用して表示できます。
zone.getDisplayName(TextStyle.FULL, Locale.ENGLISH)
には、「インドの時間」のような長い名前が表示されます。しかしこれはJoda Timeとは違って完全な名前ではありません。
「インド標準時」(該当する場合)のように、指定された名前の完全な名前が表示されます。
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
以下が表示されゾーンオフセットGMT+05:30
様所与のゾーン(パターンの大文字を注)。
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("ZZZZ");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
以下は、略語を表示するためのものです。
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("zzz");
String longName = pattern.format(ZonedDateTime.now(ZoneId.of(zoneId)));
資本ZZZ
ゾーンオフセット+0530
、+0000
等のため。
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html