Java : ZoneId (タイムゾーンID) - API使用例
ZoneId (Java SE 21 & JDK 21) の使い方まとめです。
だいたいのメソッドを網羅済みです。
API仕様書のおともにどうぞ。
概要
ZoneId は、地理的な地域ごとのタイムゾーンを定義します。
例えば日本標準時は "Asia/Tokyo" として定義されています。時差(オフセット) は +9時間です。
似たAPIに、ZoneOffset があります。
ZoneId と ZoneOffset の違いについては別途記事にしていますので、そちらもご参照ください。
final var locale = Locale.getDefault();
System.out.println(locale.toLanguageTag()); // ja-JP
final var zone = ZoneId.systemDefault();
System.out.println(zone); // Asia/Tokyo
final var dateTime = ZonedDateTime.of(
LocalDate.of(2100, 1, 2),
LocalTime.of(0, 0),
zone);
System.out.println(dateTime); // 2100-01-02T00:00+09:00[Asia/Tokyo]
final var zone1 = ZoneId.of("Asia/Tokyo");
System.out.println(zone1); // Asia/Tokyo
final var zone2 = ZoneId.of("JST", ZoneId.SHORT_IDS);
System.out.println(zone2); // Asia/Tokyo
final var zone3 = ZoneId.of("America/Los_Angeles");
System.out.println(zone3); // America/Los_Angeles
【補足】
// ZoneRulesException: Unknown time-zone ID: JST
final var id = ZoneId.of("JST");
が発生する場合は、
final var id = ZoneId.of("JST", ZoneId.SHORT_IDS);
System.out.println(id); // Asia/Tokyo
もしくは
final var id = ZoneId.of("Asia/Tokyo");
System.out.println(id); // Asia/Tokyo
をお試しください。
フィールド
static final Map<String,String> SHORT_IDS
System.out.println("-- short ids --");
ZoneId.SHORT_IDS.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(
entry -> {
System.out.println(entry);
}
);
// 結果
// ↓
//-- short ids --
//ACT=Australia/Darwin
//AET=Australia/Sydney
//AGT=America/Argentina/Buenos_Aires
//ART=Africa/Cairo
//AST=America/Anchorage
//BET=America/Sao_Paulo
//BST=Asia/Dhaka
//CAT=Africa/Harare
//CNT=America/St_Johns
//CST=America/Chicago
//CTT=Asia/Shanghai
//EAT=Africa/Addis_Ababa
//ECT=Europe/Paris
//EST=-05:00
//HST=-10:00
//IET=America/Indiana/Indianapolis
//IST=Asia/Kolkata
//JST=Asia/Tokyo
//MIT=Pacific/Apia
//MST=-07:00
//NET=Asia/Yerevan
//NST=Pacific/Auckland
//PLT=Asia/Karachi
//PNT=America/Phoenix
//PRT=America/Puerto_Rico
//PST=America/Los_Angeles
//SST=Pacific/Guadalcanal
//VST=Asia/Ho_Chi_Minh
メソッド
boolean equals (Object obj)
final var zone1 = ZoneId.of("America/Los_Angeles");
System.out.println(zone1); // America/Los_Angeles
final var zone2 = ZoneId.of("PST", ZoneId.SHORT_IDS);
System.out.println(zone2); // America/Los_Angeles
System.out.println(zone1.equals(zone2)); // true
final var zone1 = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(12));
System.out.println(zone1); // GMT+12:00
final var zone2 = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(3));
System.out.println(zone2); // GMT+03:00
final var zone3 = ZoneId.of("GMT");
System.out.println(zone3); // GMT
System.out.println(zone1.equals(zone2)); // false
System.out.println(zone1.equals(zone3)); // false
System.out.println(zone1.equals(zone3)); // false
static ZoneId from (TemporalAccessor temporal)
final var zone = ZoneId.of("Etc/GMT+1");
System.out.println(zone); // Etc/GMT+1
final var temporal = ZonedDateTime.of(2100, 4, 7, 12, 30, 45, 0, zone);
System.out.println(temporal); // 2100-04-07T12:30:45-01:00[Etc/GMT+1]
System.out.println(ZoneId.from(temporal)); // Etc/GMT+1
static Set<String> getAvailableZoneIds ()
System.out.println("-- available ids --");
ZoneId.getAvailableZoneIds().stream().sorted().forEach(id -> {
System.out.println(id);
});
// 結果
// ↓
//-- available ids --
//Africa/Abidjan
//Africa/Accra
//Africa/Addis_Ababa
//Africa/Algiers
//Africa/Asmara
//Africa/Asmera
//Africa/Bamako
// .
// .
// .
String getDisplayName (TextStyle style, Locale locale)
final var zone = ZoneId.systemDefault();
System.out.println(zone); // Asia/Tokyo
final var ret1 = zone.getDisplayName(TextStyle.FULL, Locale.JAPANESE);
System.out.println(ret1); // 日本時間
final var ret2 = zone.getDisplayName(TextStyle.SHORT, Locale.JAPANESE);
System.out.println(ret2); // GMT+09:00
final var ret3 = zone.getDisplayName(TextStyle.NARROW, Locale.JAPANESE);
System.out.println(ret3); // Asia/Tokyo
final var ret4 = zone.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println(ret4); // Japan Time
final var ret5 = zone.getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
System.out.println(ret5); // JT
final var ret6 = zone.getDisplayName(TextStyle.NARROW, Locale.ENGLISH);
System.out.println(ret6); // Asia/Tokyo
abstract String getId ()
final var zone1 = ZoneId.of("Etc/GMT+1");
System.out.println(zone1.getId()); // Etc/GMT+1
final var zone2 = ZoneId.of("PST", ZoneId.SHORT_IDS);
System.out.println(zone2.getId()); // America/Los_Angeles
abstract ZoneRules getRules ()
final var rules = ZoneId.of("America/Los_Angeles").getRules();
System.out.println(rules); // ZoneRules[currentStandardOffset=-08:00]
final var rules = ZoneId.of("Asia/Tokyo").getRules();
System.out.println(rules); // ZoneRules[currentStandardOffset=+09:00]
int hashCode ()
final var zone1 = ZoneId.of("Etc/GMT+1");
System.out.println(zone1.hashCode()); // -775703111
final var zone2 = ZoneId.of("PST", ZoneId.SHORT_IDS);
System.out.println(zone2.hashCode()); // -1536188513
ZoneId normalized ()
final var zone = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(12));
System.out.println(zone); // GMT+12:00
System.out.println(zone.normalized()); // +12:00
final var zone = ZoneId.of("America/Los_Angeles");
System.out.println(zone); // America/Los_Angeles
System.out.println(zone.normalized()); // America/Los_Angeles
static ZoneId of (String zoneId)
System.out.println(ZoneId.of("America/Los_Angeles")); // America/Los_Angeles
System.out.println(ZoneId.of("Asia/Tokyo")); // Asia/Tokyo
System.out.println(ZoneId.of("+02:00")); // +02:00
System.out.println(ZoneId.of("-12:00")); // -12:00
System.out.println(ZoneId.of("Z")); // Z
System.out.println(ZoneId.of("UTC")); // UTC
System.out.println(ZoneId.of("GMT")); // GMT
System.out.println(ZoneId.of("UTC+09:00")); // UTC+09:00
static ZoneId of (String zoneId, Map<String,String> aliasMap)
final var zone1 = ZoneId.of("PST", ZoneId.SHORT_IDS);
System.out.println(zone1); // America/Los_Angeles
final var zone2 = ZoneId.of("JST", ZoneId.SHORT_IDS);
System.out.println(zone2); // Asia/Tokyo
try {
final var zone = ZoneId.of("JST");
} catch (ZoneRulesException e) {
System.out.println("ZoneRulesException! : " + e.getMessage());
}
// 結果
// ↓
//ZoneRulesException! : Unknown time-zone ID: JST
static ZoneId ofOffset (String prefix, ZoneOffset offset)
final var zone1 = ZoneId.ofOffset("UTC", ZoneOffset.ofHours(4));
System.out.println(zone1); // UTC+04:00
final var zone2 = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(-3));
System.out.println(zone2); // GMT-03:00
final var zone3 = ZoneId.ofOffset("UT", ZoneOffset.of("+09:30:15"));
System.out.println(zone3); // UT+09:30:15
static ZoneId systemDefault ()
final var locale = Locale.getDefault();
System.out.println(locale.toLanguageTag()); // ja-JP
final var zone = ZoneId.systemDefault();
System.out.println(zone); // Asia/Tokyo
String toString ()
final var str1 = ZoneId.of("America/Los_Angeles").toString();
System.out.println(str1); // America/Los_Angeles
final var str2 = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(12)).toString();
System.out.println(str2); // GMT+12:00
関連記事
- 日付・時刻の基本
- Date, CalendarではなくLocalDateTime, ZonedDateTimeを使おう
- 文字列と日付・時刻の変換
- 日付と時刻、曜日の計算
- 現在時刻(日時)の取得いろいろ
- 現在の曜日(DayOfWeek)を取得
- ZoneIdとZoneOffsetの違い
- API 使用例
- Calendar (カレンダー)
- ChronoLocalDate
- ChronoLocalDateTime
- ChronoZonedDateTime
- Clock (時計)
- Date (日付・時刻)
- DateTimeException (日付・時刻の例外)
- DateTimeParseException (日付・時刻の解析例外)
- DayOfWeek (曜日)
- Duration (時間の量)
- Era (紀元)
- Instant (時点)
- InstantSource
- JapaneseDate (和暦を使った日付)
- LocalDate (日付・タイムゾーンなし)
- LocalDateTime (日時・タイムゾーンなし)
- LocalTime (時刻・タイムゾーンなし)
- Month (月)
- MonthDay (月・日)
- OffsetDateTime (日時・オフセットあり)
- OffsetTime (時刻・オフセットあり)
- Period (日付の量)
- Temporal
- TemporalAccessor
- TemporalAdjuster (日付・時刻の調整)
- TemporalAdjusters (日付・時刻の調整ユーティリティ)
- TimeZone (タイムゾーン)
- Year (年)
- YearMonth (年・月)
- ZonedDateTime (日時・タイムゾーンあり)
- ZoneOffset (タイムゾーン・オフセット)