Java : ZoneOffset (タイムゾーン・オフセット) - API使用例
ZoneOffset (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
グリニッジ/UTCからのタイムゾーン・オフセット(+02:00など)。
ZoneOffset は、UTC からの単純な時差(オフセット)を定義します。
地理的な地域の情報は含みません。
例えば、日本の時差は UTC から +9時間 です。
final var zoneOffset = ZoneOffset.ofHours(9);
System.out.println(zoneOffset); // +09:00
final var dateTime = OffsetDateTime.of(
LocalDate.of(2022, 11, 10),
LocalTime.of(0, 0),
zoneOffset);
System.out.println(dateTime); // 2022-11-10T00:00+09:00
似たAPIに、ZoneId があります。
こちらは地理的な地域の情報を含みます。
ZoneId と ZoneOffset の違いについては別途記事にしていますので、そちらもご参照ください。
フィールド
static final ZoneOffset MAX
サポートされる最大オフセットの定数です。
System.out.println(ZoneOffset.MAX); // +18:00
static final ZoneOffset MIN
サポートされる最小のオフセットの定数。
System.out.println(ZoneOffset.MIN); // -18:00
static final ZoneOffset UTC
UTC用のタイムゾーン・オフセット(IDがZ)。
System.out.println(ZoneOffset.UTC); // Z
ZoneIdで宣言されたフィールド
SHORT_IDS
「Java API 使用例 : ZoneId」をご参照ください。
メソッド
Temporal adjustInto (Temporal temporal)
指定された時間的オブジェクトをこのオブジェクトと同じオフセットになるように調整します。
final var temporal = OffsetDateTime.of(2021, 4, 7, 0, 0, 0, 0, ZoneOffset.ofHours(3));
System.out.println(temporal); // 2021-04-07T00:00+03:00
final var zoneOffset = ZoneOffset.ofHours(-8);
System.out.println(zoneOffset); // -08:00
final var result = zoneOffset.adjustInto(temporal);
System.out.println(result); // 2021-04-07T00:00-08:00
final var temporal = LocalDateTime.of(2021, 4, 7, 12, 30);
System.out.println(temporal); // 2021-04-07T12:30
final var zoneOffset = ZoneOffset.MAX;
System.out.println(zoneOffset); // +18:00
//zoneOffset.adjustInto(temporal); // UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds
int compareTo (ZoneOffset other)
このオフセットを別のオフセットと降順で比較します。
final var zoneOffset1 = ZoneOffset.ofHours(0);
System.out.println(zoneOffset1); // Z
final var zoneOffset2 = ZoneOffset.UTC;
System.out.println(zoneOffset2); // Z
System.out.println(zoneOffset1.compareTo(zoneOffset2)); // 0
final var zoneOffset1 = ZoneOffset.ofHours(1);
System.out.println(zoneOffset1); // +01:00
final var zoneOffset2 = ZoneOffset.ofHours(2);
System.out.println(zoneOffset2); // +02:00
System.out.println(zoneOffset1.compareTo(zoneOffset2)); // 3600
final var zoneOffset1 = ZoneOffset.ofHoursMinutes(9, 30);
System.out.println(zoneOffset1); // +09:30
final var zoneOffset2 = ZoneOffset.ofHoursMinutes(-9, -30);
System.out.println(zoneOffset2); // -09:30
System.out.println(zoneOffset1.compareTo(zoneOffset2)); // -68400
final var zoneOffset1 = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset1); // +01:02:03
final var zoneOffset2 = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset2); // +01:02:03
System.out.println(zoneOffset1.compareTo(zoneOffset2)); // 0
boolean equals (Object obj)
このオフセットが別のオフセットと等しいかどうかをチェックします。
final var zoneOffset1 = ZoneOffset.ofHours(0);
System.out.println(zoneOffset1); // Z
final var zoneOffset2 = ZoneOffset.UTC;
System.out.println(zoneOffset2); // Z
System.out.println(zoneOffset1.equals(zoneOffset2)); // true
final var zoneOffset1 = ZoneOffset.ofHours(1);
System.out.println(zoneOffset1); // +01:00
final var zoneOffset2 = ZoneOffset.ofHours(2);
System.out.println(zoneOffset2); // +02:00
System.out.println(zoneOffset1.equals(zoneOffset2)); // false
final var zoneOffset1 = ZoneOffset.ofHoursMinutes(9, 30);
System.out.println(zoneOffset1); // +09:30
final var zoneOffset2 = ZoneOffset.ofHoursMinutes(-9, -30);
System.out.println(zoneOffset2); // -09:30
System.out.println(zoneOffset1.equals(zoneOffset2)); // false
final var zoneOffset1 = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset1); // +01:02:03
final var zoneOffset2 = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset2); // +01:02:03
System.out.println(zoneOffset1.equals(zoneOffset2)); // true
static ZoneOffset from (TemporalAccessor temporal)
時間的オブジェクトからZoneOffsetのインスタンスを取得します。
final var temporal = OffsetDateTime.of(2021, 4, 7, 0, 0, 0, 0, ZoneOffset.ofHours(-4));
System.out.println(temporal); // 2021-04-07T00:00-04:00
final var zoneOffset = ZoneOffset.from(temporal);
System.out.println(zoneOffset); // -04:00
final var temporal = ZonedDateTime.of(2021, 4, 7, 12, 30, 45, 0, ZoneId.systemDefault());
System.out.println(temporal); // 2021-04-07T12:30:45+09:00[Asia/Tokyo]
final var zoneOffset = ZoneOffset.from(temporal);
System.out.println(zoneOffset); // +09:00
final var temporal = LocalDateTime.of(2021, 4, 7, 12, 30);
System.out.println(temporal); // 2021-04-07T12:30
//ZoneOffset.from(temporal); // DateTimeException: Unable to obtain ZoneOffset from TemporalAccessor
int get (TemporalField field)
このオフセットから指定されたフィールドの値をintとして取得します。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset); // Z
System.out.println(zoneOffset.get(ChronoField.OFFSET_SECONDS)); // 0
//zoneOffset.get(ChronoField.MINUTE_OF_HOUR); // UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset); // +01:02:03
System.out.println(zoneOffset.get(ChronoField.OFFSET_SECONDS)); // 3723
String getId ()
正規化されたゾーン・オフセットIDを取得します。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset.getId()); // Z
final var zoneOffset = ZoneOffset.ofHours(-9);
System.out.println(zoneOffset.getId()); // -09:00
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset.getId()); // +01:02:03
long getLong (TemporalField field)
このオフセットから指定されたフィールドの値をlongとして取得します。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset); // Z
System.out.println(zoneOffset.getLong(ChronoField.OFFSET_SECONDS)); // 0
//zoneOffset.getLong(ChronoField.MINUTE_OF_HOUR); // UnsupportedTemporalTypeException: Unsupported field
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset); // +01:02:03
System.out.println(zoneOffset.getLong(ChronoField.OFFSET_SECONDS)); // 3723
ZoneRules getRules ()
関連付けられたタイムゾーン・ルールを取得します。
final var roles = ZoneOffset.UTC.getRules();
System.out.println(roles); // ZoneRules[currentStandardOffset=Z]
final var roles = ZoneOffset.ofHours(2).getRules();
System.out.println(roles); // ZoneRules[currentStandardOffset=+02:00]
final var roles = ZoneOffset.ofHoursMinutes(-9, -30).getRules();
System.out.println(roles); // ZoneRules[currentStandardOffset=-09:30]
final var roles = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3).getRules();
System.out.println(roles); // ZoneRules[currentStandardOffset=+01:02:03]
int getTotalSeconds ()
合計ゾーン・オフセットを秒で取得します。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset); // Z
System.out.println(zoneOffset.getTotalSeconds()); // 0
final var zoneOffset = ZoneOffset.ofHours(2);
System.out.println(zoneOffset); // +02:00
System.out.println(zoneOffset.getTotalSeconds()); // 7200
final var zoneOffset = ZoneOffset.ofHoursMinutes(-9, -30);
System.out.println(zoneOffset); // -09:30
System.out.println(zoneOffset.getTotalSeconds()); // -34200
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset); // +01:02:03
System.out.println(zoneOffset.getTotalSeconds()); // 3723
int hashCode ()
このオフセットのハッシュ・コード。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset); // Z
System.out.println(zoneOffset.hashCode()); // 0
final var zoneOffset = ZoneOffset.ofHours(2);
System.out.println(zoneOffset); // +02:00
System.out.println(zoneOffset.hashCode()); // 7200
final var zoneOffset = ZoneOffset.ofHoursMinutes(-9, -30);
System.out.println(zoneOffset); // -09:30
System.out.println(zoneOffset.hashCode()); // -34200
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(1, 2, 3);
System.out.println(zoneOffset); // +01:02:03
System.out.println(zoneOffset.hashCode()); // 3723
boolean isSupported (TemporalField field)
指定されたフィールドがサポートされているかどうかをチェックします。
final var zoneOffset = ZoneOffset.ofHours(2);
System.out.println(zoneOffset); // +02:00
System.out.println(zoneOffset.isSupported(ChronoField.OFFSET_SECONDS)); // true
System.out.println(zoneOffset.get(ChronoField.OFFSET_SECONDS)); // 7200
System.out.println(zoneOffset.isSupported(ChronoField.MINUTE_OF_HOUR)); // false
//zoneOffset.get(ChronoField.MINUTE_OF_HOUR); // UnsupportedTemporalTypeException: Unsupported field: MinuteOfHour
static ZoneOffset of (String offsetId)
IDを使用してZoneOffsetのインスタンスを取得します。
System.out.println(ZoneOffset.of("Z")); // Z
//ZoneOffset.of("0"); // DateTimeException: Invalid ID for ZoneOffset, invalid format: 0
System.out.println(ZoneOffset.of("+09")); // +09:00
System.out.println(ZoneOffset.of("-08")); // -08:00
System.out.println(ZoneOffset.of("+01:02")); // +01:02
System.out.println(ZoneOffset.of("-01:02:03")); // -01:02:03
static ZoneOffset ofHours (int hours)
オフセット(時)を使用してZoneOffsetのインスタンスを取得します。
System.out.println(ZoneOffset.ofHours(0)); // Z
System.out.println(ZoneOffset.ofHours(1)); // +01:00
System.out.println(ZoneOffset.ofHours(2)); // +02:00
System.out.println(ZoneOffset.ofHours(-1)); // -01:00
System.out.println(ZoneOffset.ofHours(-2)); // -02:00
System.out.println(ZoneOffset.ofHours(18)); // +18:00
//ZoneOffset.ofHours(19); // DateTimeException: Zone offset hours not in valid range
System.out.println(ZoneOffset.ofHours(-18)); // -18:00
//ZoneOffset.ofHours(-19); // DateTimeException: Zone offset hours not in valid range
static ZoneOffset ofHoursMinutes (int hours, int minutes)
オフセット(時と分)を使用してZoneOffsetのインスタンスを取得します。
System.out.println(ZoneOffset.ofHoursMinutes(0, 0)); // Z
System.out.println(ZoneOffset.ofHoursMinutes(1, 10)); // +01:10
System.out.println(ZoneOffset.ofHoursMinutes(2, 25)); // +02:25
System.out.println(ZoneOffset.ofHoursMinutes(-3, -30)); // -03:30
System.out.println(ZoneOffset.ofHoursMinutes(-4, -45)); // -04:45
static ZoneOffset ofHoursMinutesSeconds (int hours, int minutes, int seconds)
オフセット(時、分および秒)を使用してZoneOffsetのインスタンスを取得します。
System.out.println(ZoneOffset.ofHoursMinutesSeconds(0, 0, 0)); // Z
System.out.println(ZoneOffset.ofHoursMinutesSeconds(1, 10, 12)); // +01:10:12
System.out.println(ZoneOffset.ofHoursMinutesSeconds(2, 25, 14)); // +02:25:14
System.out.println(ZoneOffset.ofHoursMinutesSeconds(-3, -30, 0)); // -03:30
System.out.println(ZoneOffset.ofHoursMinutesSeconds(-4, 0, -55)); // -04:00:55
static ZoneOffset ofTotalSeconds (int totalSeconds)
合計オフセット(秒)を指定してZoneOffsetのインスタンスを取得します。
System.out.println(ZoneOffset.ofTotalSeconds(0)); // Z
System.out.println(ZoneOffset.ofTotalSeconds(60)); // +00:01
System.out.println(ZoneOffset.ofTotalSeconds(3600)); // +01:00
System.out.println(ZoneOffset.ofTotalSeconds(-2)); // -00:00:02
System.out.println(ZoneOffset.ofTotalSeconds(-3723)); // -01:02:03
<R> R query (TemporalQuery<R> query)
指定された問合せを使用してこのオフセットを問い合せます。
// 符号を反転させるクエリ。
final var temporalQuery = new TemporalQuery<ZoneOffset>() {
@Override
public ZoneOffset queryFrom(TemporalAccessor temporal) {
final var seconds = temporal.get(ChronoField.OFFSET_SECONDS);
return ZoneOffset.ofTotalSeconds(-seconds);
}
};
{
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset); // Z
System.out.println(zoneOffset.query(temporalQuery)); // Z
}
{
final var zoneOffset = ZoneOffset.ofHours(8);
System.out.println(zoneOffset); // +08:00
System.out.println(zoneOffset.query(temporalQuery)); // -08:00
}
{
final var zoneOffset = ZoneOffset.ofHoursMinutesSeconds(-2, -3, -4);
System.out.println(zoneOffset); // -02:03:04
System.out.println(zoneOffset.query(temporalQuery)); // +02:03:04
}
ValueRange range (TemporalField field)
指定されたフィールドの有効な値の範囲を取得します。
final var zoneOffset = ZoneOffset.UTC;
System.out.println(zoneOffset.range(ChronoField.OFFSET_SECONDS)); // -64800 - 64800
//zoneOffset.range(ChronoField.MINUTE_OF_HOUR); // UnsupportedTemporalTypeException: Unsupported field
String toString ()
正規化IDを使用して、このオフセットをStringとして出力します。
このAPIは getId() と同等となります。
API使用例はそちらのメソッドをご参照ください。
ZoneIdで宣言されたメソッド
getAvailableZoneIds, getDisplayName, normalized, of, ofOffset, systemDefault
「Java API 使用例 : ZoneId」をご参照ください。
関連記事
- 日付・時刻の基本
- Date, CalendarではなくLocalDateTime, ZonedDateTimeを使おう
- 文字列と日付・時刻の変換
- 日時と曜日の計算
- 現在時刻(日時)の取得いろいろ
- 現在の曜日(DayOfWeek)を取得
- ZoneIdとZoneOffsetの違い
- API 使用例
- Calendar (カレンダー)
- Date (日付・時刻)
- DateTimeException (日付・時刻の例外)
- DateTimeParseException (日付・時刻の解析例外)
- DayOfWeek (曜日)
- Duration (時間の量)
- LocalDate (日付・タイムゾーンなし)
- LocalDateTime (日時・タイムゾーンなし)
- LocalTime (時刻・タイムゾーンなし)
- Month (月)
- Instant (時点)
- OffsetDateTime (日時・オフセットあり)
- OffsetTime (時刻・オフセットあり)
- Period (日付の量)
- TemporalAdjusters (日時の調整ユーティリティ)
- TimeZone (タイムゾーン)
- Year (年)
- ZonedDateTime (日時・タイムゾーンあり)
- ZoneId (タイムゾーンID)