다음 접근 방식이 적용되었습니다.
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);
}
내가 지금 알지 못하는 다른 방법이나 아마도 더 좋은 방법이있을 수 있습니다.
아니면 (예 Etc/GMT+0
) 그리니치 시간
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);
}
, 그것은 예
+00:00
대신 제 마찬가지로
GMT+00:00
을 표시하기위한 표시한다. mm : HH - 이름 로케일을 사용할 수없는 경우
,이 방법 (public final String getName(long instant)
)의 포맷 [+]에 문자열을 반환한다. 다음
은 협정 세계시 예를 UTC 들면
public String getName(long instant, Locale 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 Time API 자바 SE 8되는이 더욱 단순화 인 .
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
, +0000
는 +0530
처럼 영역이 오프셋.
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html