Java : OffsetTime (時刻・オフセットあり) - API使用例
OffsetTime (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
ISO-8601暦体系におけるUTC/グリニッジからのオフセット付きの時間(10:15:30+01:00など)。
OffsetTime は時刻 (時と分と秒とナノ秒) を表すクラスです。
また、時差となるオフセット (ZoneOffset) を持ちます。
インスタンスの生成には of メソッドを使います。
final var time = OffsetTime.of(13, 30, 15, 123000000, ZoneOffset.ofHours(4));
System.out.println(time); // 13:30:15.123+04:00
System.out.println(time.getHour()); // 13
System.out.println(time.getMinute()); // 30
System.out.println(time.getSecond()); // 15
System.out.println(time.getNano()); // 123000000
System.out.println(time.getOffset()); // +04:00
似た API としては LocalTime があります。
LocalTime はオフセットを持ちません。
フィールド
static final OffsetTime MAX
サポートされている最大のOffsetTimeである「23:59:59.999999999-18:00」。
System.out.println(OffsetTime.MAX); // 23:59:59.999999999-18:00
System.out.println(OffsetTime.MAX.getHour()); // 23
System.out.println(OffsetTime.MAX.getMinute()); // 59
System.out.println(OffsetTime.MAX.getSecond()); // 59
System.out.println(OffsetTime.MAX.getNano()); // 999999999
System.out.println(OffsetTime.MAX.getOffset()); // -18:00
static final OffsetTime MIN
サポートされている最小のOffsetTimeである「00:00:00+18:00」。
System.out.println(OffsetTime.MIN); // 00:00+18:00
System.out.println(OffsetTime.MIN.getHour()); // 0
System.out.println(OffsetTime.MIN.getMinute()); // 0
System.out.println(OffsetTime.MIN.getSecond()); // 0
System.out.println(OffsetTime.MIN.getNano()); // 0
System.out.println(OffsetTime.MIN.getOffset()); // +18:00
メソッド
Temporal adjustInto (Temporal temporal)
指定された時間的オブジェクトを、このオブジェクトと同じオフセットおよび時間を持つように調整します。
final var temporal = OffsetDateTime.of(2000, 1, 1, 2, 3, 0, 0, ZoneOffset.UTC);
System.out.println(temporal); // 2000-01-01T02:03Z
final var time = OffsetTime.of(23, 59, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 23:59+04:00
final var result = time.adjustInto(temporal);
System.out.println(result); // 2000-01-01T23:59+04:00
final var temporal = ZonedDateTime.of(2000, 1, 1, 2, 3, 0, 0, ZoneId.systemDefault());
System.out.println(temporal); // 2000-01-01T02:03+09:00[Asia/Tokyo]
final var time = OffsetTime.of(20, 30, 40, 123456, ZoneOffset.UTC);
System.out.println(time); // 20:30:40.000123456Z
final var result = time.adjustInto(temporal);
System.out.println(result); // 2000-01-01T20:30:40.000123456+09:00[Asia/Tokyo]
OffsetDateTime atDate (LocalDate date)
この時間を日付と組み合せてOffsetDateTimeを作成します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
final var ret1 = time.atDate(LocalDate.of(2021, 4, 12));
System.out.println(ret1); // 2021-04-12T13:30:15Z
final var ret2 = time.atDate(LocalDate.of(-900, 1, 1));
System.out.println(ret2); // -0900-01-01T13:30:15Z
int compareTo (OffsetTime other)
このOffsetTimeをもう一方の時間と比較します。
final var time1 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time1); // 00:00+04:00
final var time2 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(-8));
System.out.println(time2); // 00:00-08:00
System.out.println(time1.compareTo(time2)); // -1
final var time1 = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:30:15Z
final var time2 = OffsetTime.of(14, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time2); // 14:30:15Z
System.out.println(time1.compareTo(time2)); // -1
final var time1 = OffsetTime.of(13, 31, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:31Z
final var time2 = OffsetTime.of(13, 30, 59, 0, ZoneOffset.UTC);
System.out.println(time2); // 13:30:59Z
System.out.println(time1.compareTo(time2)); // 1
final var time1 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 23:30Z
final var time2 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time2); // 23:30Z
System.out.println(time1.compareTo(time2)); // 0
boolean equals (Object obj)
この時間がもう一方の時間と等しいかどうかを確認します。
final var time1 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time1); // 00:00+04:00
final var time2 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(-8));
System.out.println(time2); // 00:00-08:00
System.out.println(time1.equals(time2)); // false
final var time1 = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:30:15Z
final var time2 = OffsetTime.of(14, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time2); // 14:30:15Z
System.out.println(time1.equals(time2)); // false
final var time1 = OffsetTime.of(13, 31, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:31Z
final var time2 = OffsetTime.of(13, 30, 59, 0, ZoneOffset.UTC);
System.out.println(time2); // 13:30:59Z
System.out.println(time1.equals(time2)); // false
final var time1 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 23:30Z
final var time2 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time2); // 23:30Z
System.out.println(time1.equals(time2)); // true
String format (DateTimeFormatter formatter)
指定されたフォーマッタを使用してこの時間を書式設定します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 13:30:15+04:00
{
final var ret1 = time.format(DateTimeFormatter.ISO_OFFSET_TIME);
System.out.println(ret1); // 13:30:15+04:00
final var ret2 = time.format(DateTimeFormatter.ofPattern("HH時mm分ss秒 O"));
System.out.println(ret2); // 13時30分15秒 GMT+4
}
{
System.out.println(Locale.getDefault()); // ja_JP
final var ret1 = time.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM));
System.out.println(ret1); // 13:30:15
final var ret2 = time.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT));
System.out.println(ret2); // 13:30
// FULL と LONG はタイムゾーンが必要です。
//time.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.FULL)); // DateTimeException
//time.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.LONG)); // DateTimeException
}
static OffsetTime from (TemporalAccessor temporal)
時間的オブジェクトからOffsetTimeのインスタンスを取得します。
final var temporal = OffsetDateTime.of(1999, 12, 15, 4, 5, 6, 123000, ZoneOffset.ofHours(12));
System.out.println(temporal); // 1999-12-15T04:05:06.000123+12:00
System.out.println(OffsetTime.from(temporal)); //04:05:06.000123+12:00
final var temporal = ZonedDateTime.of(2021, 1, 3, 1, 2, 3, 456, ZoneId.systemDefault());
System.out.println(temporal); // 2021-01-03T01:02:03.000000456+09:00[Asia/Tokyo]
System.out.println(OffsetTime.from(temporal)); // 01:02:03.000000456+09:00
int get (TemporalField field)
指定されたフィールドの値をこの時間からintとして取得します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.ofHours(1));
System.out.println(time); // 13:30:15.000000123+01:00
System.out.println(time.get(ChronoField.HOUR_OF_DAY)); // 13
System.out.println(time.get(ChronoField.MINUTE_OF_HOUR)); // 30
System.out.println(time.get(ChronoField.SECOND_OF_MINUTE)); // 15
System.out.println(time.get(ChronoField.NANO_OF_SECOND)); // 123
System.out.println(time.get(ChronoField.OFFSET_SECONDS)); // 3600
int getHour ()
時フィールドを取得します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.getHour()); // 13
long getLong (TemporalField field)
指定されたフィールドの値をこの時間からlongとして取得します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.ofHours(1));
System.out.println(time); // 13:30:15.000000123+01:00
System.out.println(time.getLong(ChronoField.HOUR_OF_DAY)); // 13
System.out.println(time.getLong(ChronoField.MINUTE_OF_HOUR)); // 30
System.out.println(time.getLong(ChronoField.SECOND_OF_MINUTE)); // 15
System.out.println(time.getLong(ChronoField.NANO_OF_SECOND)); // 123
System.out.println(time.getLong(ChronoField.OFFSET_SECONDS)); // 3600
int getMinute ()
分フィールドを取得します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.getMinute()); // 30
int getNano ()
ナノ秒フィールドを取得します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.getNano()); // 0
final var time = OffsetTime.of(13, 30, 15, 123456789, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.123456789Z
System.out.println(time.getNano()); // 123456789
ZoneOffset getOffset ()
「+01:00」などのゾーン・オフセットを取得します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.getOffset()); // Z
final var time = OffsetTime.of(1, 2, 3, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 01:02:03+04:00
System.out.println(time.getOffset()); // +04:00
int getSecond ()
秒フィールドを取得します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.getSecond()); // 15
int hashCode ()
この時間のハッシュ・コード。
System.out.println(OffsetTime.of(1, 2, 3, 4, ZoneOffset.UTC).hashCode()); // -736645786
System.out.println(OffsetTime.of(1, 2, 3, 4, ZoneOffset.ofHours(4)).hashCode()); // -736651994
System.out.println(OffsetTime.of(23, 59, 59, 0, ZoneOffset.UTC).hashCode()); // 1437890708
boolean isAfter (OffsetTime other)
両方の時間を一般的な日付に当てはめて、このOffsetTimeのインスタントが指定された時間のそれより後にあるかどうかを確認します。
final var time = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:01Z
final var time2 = OffsetTime.of(12, 0, 0, 0, ZoneOffset.UTC);
final var time3 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
final var time4 = OffsetTime.of(12, 2, 0, 0, ZoneOffset.UTC);
System.out.println(time2); // 12:00Z
System.out.println(time3); // 12:01Z
System.out.println(time4); // 12:02Z
System.out.println(time.isAfter(time2)); // true
System.out.println(time.isAfter(time3)); // false
System.out.println(time.isAfter(time4)); // false
final var time = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 12:01+04:00
final var time2 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
final var time3 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(-4));
final var time4 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(8));
System.out.println(time2); // 12:01Z
System.out.println(time3); // 12:01-04:00
System.out.println(time4); // 12:01+08:00
System.out.println(time.isAfter(time2)); // false
System.out.println(time.isAfter(time3)); // false
System.out.println(time.isAfter(time4)); // true
boolean isBefore (OffsetTime other)
両方の時間を一般的な日付に当てはめて、このOffsetTimeのインスタントが指定された時間のそれより前にあるかどうかを確認します。
final var time = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:01Z
final var time2 = OffsetTime.of(12, 0, 0, 0, ZoneOffset.UTC);
final var time3 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
final var time4 = OffsetTime.of(12, 2, 0, 0, ZoneOffset.UTC);
System.out.println(time2); // 12:00Z
System.out.println(time3); // 12:01Z
System.out.println(time4); // 12:02Z
System.out.println(time.isBefore(time2)); // false
System.out.println(time.isBefore(time3)); // false
System.out.println(time.isBefore(time4)); // true
final var time = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 12:01+04:00
final var time2 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.UTC);
final var time3 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(-4));
final var time4 = OffsetTime.of(12, 1, 0, 0, ZoneOffset.ofHours(8));
System.out.println(time2); // 12:01Z
System.out.println(time3); // 12:01-04:00
System.out.println(time4); // 12:01+08:00
System.out.println(time.isBefore(time2)); // true
System.out.println(time.isBefore(time3)); // true
System.out.println(time.isBefore(time4)); // false
boolean isEqual (OffsetTime other)
両方の時間を一般的な日付に当てはめて、このOffsetTimeのインスタントが指定された時間のそれと等しいかどうかを確認します。
final var time1 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time1); // 00:00+04:00
final var time2 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.ofHours(-8));
System.out.println(time2); // 00:00-08:00
System.out.println(time1.isEqual(time2)); // false
final var time1 = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:30:15Z
final var time2 = OffsetTime.of(14, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time2); // 14:30:15Z
System.out.println(time1.isEqual(time2)); // false
final var time1 = OffsetTime.of(13, 31, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 13:31Z
final var time2 = OffsetTime.of(13, 30, 59, 0, ZoneOffset.UTC);
System.out.println(time2); // 13:30:59Z
System.out.println(time1.isEqual(time2)); // false
final var time1 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time1); // 23:30Z
final var time2 = OffsetTime.of(23, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time2); // 23:30Z
System.out.println(time1.isEqual(time2)); // true
boolean isSupported (TemporalField field)
指定されたフィールドがサポートされているかどうかをチェックします。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time.isSupported(ChronoField.HOUR_OF_DAY)); // true
System.out.println(time.isSupported(ChronoField.MINUTE_OF_HOUR)); // true
System.out.println(time.isSupported(ChronoField.SECOND_OF_MINUTE)); // true
System.out.println(time.isSupported(ChronoField.NANO_OF_SECOND)); // true
System.out.println(time.isSupported(ChronoField.OFFSET_SECONDS)); // true
System.out.println(time.isSupported(ChronoField.YEAR)); // false
boolean isSupported (TemporalUnit unit)
指定された単位がサポートされているかどうかをチェックします。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time.isSupported(ChronoUnit.HOURS)); // true
System.out.println(time.isSupported(ChronoUnit.MINUTES)); // true
System.out.println(time.isSupported(ChronoUnit.SECONDS)); // true
System.out.println(time.isSupported(ChronoUnit.NANOS)); // true
System.out.println(time.isSupported(ChronoUnit.DAYS)); // false
OffsetTime minus (long amountToSubtract, TemporalUnit unit)
指定された量を減算して、この時間のコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.minus(1, ChronoUnit.HOURS)); // 12:30:15.000000123Z
System.out.println(time.minus(2, ChronoUnit.MINUTES)); // 13:28:15.000000123Z
System.out.println(time.minus(3, ChronoUnit.SECONDS)); // 13:30:12.000000123Z
System.out.println(time.minus(4, ChronoUnit.NANOS)); // 13:30:15.000000119Z
OffsetTime minus (TemporalAmount amountToSubtract)
指定された量を減算して、この時間のコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.minus(Duration.ofHours(1))); // 12:30:15.000000123Z
System.out.println(time.minus(Duration.ofMinutes(2))); // 13:28:15.000000123Z
System.out.println(time.minus(Duration.ofSeconds(3))); // 13:30:12.000000123Z
System.out.println(time.minus(Duration.ofNanos(4))); // 13:30:15.000000119Z
OffsetTime minusHours (long hours)
指定された時間数を減算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.minusHours(1)); // 12:30:15Z
System.out.println(time.minusHours(2)); // 11:30:15Z
System.out.println(time.minusHours(13)); // 00:30:15Z
System.out.println(time.minusHours(14)); // 23:30:15Z
OffsetTime minusMinutes (long minutes)
指定された分数を減算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.minusMinutes(1)); // 13:29:15Z
System.out.println(time.minusMinutes(2)); // 13:28:15Z
System.out.println(time.minusMinutes(30)); // 13:00:15Z
System.out.println(time.minusMinutes(31)); // 12:59:15Z
System.out.println(time.minusMinutes(60 * 13)); // 00:30:15Z
System.out.println(time.minusMinutes(60 * 14)); // 23:30:15Z
OffsetTime minusNanos (long nanos)
指定されたナノ秒数を減算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.minusNanos(1L)); // 13:30:15.000000122Z
System.out.println(time.minusNanos(2L)); // 13:30:15.000000121Z
System.out.println(time.minusNanos(123L)); // 13:30:15Z
System.out.println(time.minusNanos(124L)); // 13:30:14.999999999Z
OffsetTime minusSeconds (long seconds)
指定された秒数を減算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.minusSeconds(1)); // 13:30:14Z
System.out.println(time.minusSeconds(2)); // 13:30:13Z
System.out.println(time.minusSeconds(15)); // 13:30Z
System.out.println(time.minusSeconds(16)); // 13:29:59Z
System.out.println(time.minusSeconds(76)); // 13:28:59Z
System.out.println(time.minusSeconds(60 * 30)); // 13:00:15Z
System.out.println(time.minusSeconds(60 * 31)); // 12:59:15Z
static OffsetTime now ()
デフォルトのタイムゾーンのシステム・クロックから現在の時間を取得します。
System.out.println(OffsetTime.now()); // 15:01:24.411520900+09:00
System.out.println(ZonedDateTime.now()); // 2022-01-30T15:01:24.412520400+09:00[Asia/Tokyo]
static OffsetTime now (Clock clock)
指定されたクロックから現在の時間を取得します。
// 意図的に6時間進めたClock
final var clock = Clock.offset(Clock.systemDefaultZone(), Duration.ofHours(6));
System.out.println(OffsetTime.now()); // 15:02:05.908746900+09:00
System.out.println(OffsetTime.now(clock)); // 21:02:05.908746900+09:00
static OffsetTime now (ZoneId zone)
指定されたタイムゾーンのシステム・クロックから現在の時間を取得します。
System.out.println(ZoneId.systemDefault()); // Asia/Tokyo
// Asia/Tokyo は UTC と比べて +9時間の時差があります。
System.out.println(OffsetTime.now()); // 15:02:40.868642600+09:00
System.out.println(OffsetTime.now(ZoneOffset.UTC)); // 06:02:40.868642600Z
static OffsetTime of (int hour, int minute, int second, int nanoOfSecond, ZoneOffset offset)
時、分、秒、およびナノ秒からOffsetTimeのインスタンスを取得します。
final var ret1 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(ret1); // 00:00Z
final var ret2 = OffsetTime.of(12, 30, 45, 1234, ZoneOffset.ofHours(4));
System.out.println(ret2); // 12:30:45.000001234+04:00
static OffsetTime of (LocalTime time, ZoneOffset offset)
ローカル時間およびオフセットからOffsetTimeのインスタンスを取得します。
final var localTime = LocalTime.of(0, 0);
System.out.println(localTime); // 00:00
final var ret = OffsetTime.of(localTime, ZoneOffset.UTC);
System.out.println(ret); // 00:00Z
final var localTime = LocalTime.of(12, 30, 45, 123);
System.out.println(localTime); // 12:30:45.000000123
final var ret = OffsetTime.of(localTime, ZoneOffset.ofHours(4));
System.out.println(ret); // 12:30:45.000000123+04:00
static OffsetTime ofInstant (Instant instant, ZoneId zone)
InstantおよびゾーンIDからOffsetTimeのインスタンスを取得します。
final var instant = Instant.ofEpochSecond(1617883200);
System.out.println(instant); // 2021-04-08T12:00:00Z
System.out.println(OffsetTime.ofInstant(instant, ZoneOffset.UTC)); // 12:00Z
System.out.println(OffsetTime.ofInstant(instant, ZoneOffset.ofHours(8))); // 20:00+08:00
System.out.println(OffsetTime.ofInstant(instant, ZoneOffset.ofHours(-8))); // 04:00-08:00
static OffsetTime parse (CharSequence text)
テキスト文字列(10:15:30+01:00など)からOffsetTimeのインスタンスを取得します。
System.out.println(OffsetTime.parse("12:30Z")); // 12:30Z
System.out.println(OffsetTime.parse("23:59:59.123456789Z")); // 23:59:59.123456789Z
System.out.println(OffsetTime.parse("02:05:01+04:00")); // 02:05:01+04:00
//OffsetTime.parse("2:5:1+4:00"); // DateTimeParseException
static OffsetTime parse (CharSequence text, DateTimeFormatter formatter)
特定のフォーマッタを使用して、テキスト文字列からOffsetTimeのインスタンスを取得します。
final var ret1 = OffsetTime.parse("12:30:15+04:00", DateTimeFormatter.ISO_OFFSET_TIME);
System.out.println(ret1); // 12:30:15+04:00
final var ret2 = OffsetTime.parse("2:5:1 Z", DateTimeFormatter.ofPattern("H:m:s X"));
System.out.println(ret2); // 02:05:01Z
final var ret3 = OffsetTime.parse("12時30分15秒 GMT+9", DateTimeFormatter.ofPattern("H時m分s秒 O"));
System.out.println(ret3); // 12:30:15+09:00
OffsetTime plus (long amountToAdd, TemporalUnit unit)
この時刻のコピーに指定された時間を追加したものを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.plus(1, ChronoUnit.HOURS)); // 14:30:15.000000123Z
System.out.println(time.plus(2, ChronoUnit.MINUTES)); // 13:32:15.000000123Z
System.out.println(time.plus(3, ChronoUnit.SECONDS)); // 13:30:18.000000123Z
System.out.println(time.plus(4, ChronoUnit.NANOS)); // 13:30:15.000000127Z
OffsetTime plus (TemporalAmount amountToAdd)
この時刻のコピーに指定された時間を追加したものを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.plus(Duration.ofHours(1))); // 14:30:15.000000123Z
System.out.println(time.plus(Duration.ofMinutes(2))); // 13:32:15.000000123Z
System.out.println(time.plus(Duration.ofSeconds(3))); // 13:30:18.000000123Z
System.out.println(time.plus(Duration.ofNanos(4))); // 13:30:15.000000127Z
OffsetTime plusHours (long hours)
指定された時間数を加算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.plusHours(1)); // 14:30:15Z
System.out.println(time.plusHours(2)); // 15:30:15Z
System.out.println(time.plusHours(10)); // 23:30:15Z
System.out.println(time.plusHours(11)); // 00:30:15Z
OffsetTime plusMinutes (long minutes)
指定された分数を加算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.plusMinutes(1)); // 13:31:15Z
System.out.println(time.plusMinutes(2)); // 13:32:15Z
System.out.println(time.plusMinutes(29)); // 13:59:15Z
System.out.println(time.plusMinutes(30)); // 14:00:15Z
System.out.println(time.plusMinutes(31)); // 14:01:15Z
System.out.println(time.plusMinutes(60 * 10)); // 23:30:15Z
System.out.println(time.plusMinutes(60 * 11)); // 00:30:15Z
OffsetTime plusNanos (long nanos)
指定されたナノ秒数を加算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 13:30:15.000000123Z
System.out.println(time.plusNanos(1L)); // 13:30:15.000000124Z
System.out.println(time.plusNanos(2L)); // 13:30:15.000000125Z
System.out.println(time.plusNanos(999999999L - 123)); // 13:30:15.999999999Z
System.out.println(time.plusNanos(999999999L - 122)); // 13:30:16Z
OffsetTime plusSeconds (long seconds)
指定された秒数を加算して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 13:30:15Z
System.out.println(time.plusSeconds(1)); // 13:30:16Z
System.out.println(time.plusSeconds(2)); // 13:30:17Z
System.out.println(time.plusSeconds(44)); // 13:30:59Z
System.out.println(time.plusSeconds(45)); // 13:31Z
System.out.println(time.plusSeconds(46)); // 13:31:01Z
System.out.println(time.plusSeconds(60 * 29)); // 13:59:15Z
System.out.println(time.plusSeconds(60 * 30)); // 14:00:15Z
<R> R query (TemporalQuery<R> query)
指定された問合せを使用してこの時間を問い合せます。
final var time = OffsetTime.of(12, 30, 20, 123456789, ZoneOffset.ofHours(4));
System.out.println(time); // 12:30:20.123456789+04:00
System.out.println(time.query(TemporalQueries.localTime())); // 12:30:20.123456789
System.out.println(time.query(TemporalQueries.offset())); // +04:00
System.out.println(time.query(TemporalQueries.precision())); // Nanos
ValueRange range (TemporalField field)
指定されたフィールドの有効な値の範囲を取得します。
final var time = OffsetTime.of(0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(time.range(ChronoField.HOUR_OF_DAY)); // 0 - 23
System.out.println(time.range(ChronoField.MINUTE_OF_HOUR)); // 0 - 59
System.out.println(time.range(ChronoField.SECOND_OF_MINUTE)); // 0 - 59
System.out.println(time.range(ChronoField.NANO_OF_SECOND)); // 0 - 999999999
System.out.println(time.range(ChronoField.OFFSET_SECONDS)); // -64800 - 64800
long toEpochSecond (LocalDate date)
このOffsetTimeを1970-01-01T00:00:00Zの時代からの秒数に変換します。
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30Z
final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08
final long ret = time.toEpochSecond(date);
System.out.println(ret); // 1617885000
System.out.println(Instant.ofEpochSecond(ret)); // 2021-04-08T12:30:00Z
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.ofHours(8));
System.out.println(time); // 12:30+08:00
final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08
final long ret = time.toEpochSecond(date);
System.out.println(ret); // 1617856200
System.out.println(Instant.ofEpochSecond(ret)); // 2021-04-08T04:30:00Z
LocalTime toLocalTime ()
この日付/時間のLocalTime部分を取得します。
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30Z
final var ret = time.toLocalTime();
System.out.println(ret); // 12:30
final var time = OffsetTime.of(1, 2, 3, 456, ZoneOffset.ofHours(8));
System.out.println(time); // 01:02:03.000000456+08:00
final var ret = time.toLocalTime();
System.out.println(ret); // 01:02:03.000000456
String toString ()
この時間をStringとして出力します(10:15:30+01:00など)。
final var str1 = OffsetTime.of(0, 0, 0, 0, ZoneOffset.UTC).toString();
System.out.println(str1); // 00:00Z
final var str2 = OffsetTime.of(1, 2, 3, 456, ZoneOffset.ofHours(4)).toString();
System.out.println(str2); // 01:02:03.000000456+04:00
OffsetTime truncatedTo (TemporalUnit unit)
時間を切り捨てて、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 123456789, ZoneOffset.UTC);
System.out.println(time); // 12:30:15.123456789Z
System.out.println(time.truncatedTo(ChronoUnit.HOURS)); // 12:00Z
System.out.println(time.truncatedTo(ChronoUnit.MINUTES)); // 12:30Z
System.out.println(time.truncatedTo(ChronoUnit.SECONDS)); // 12:30:15Z
System.out.println(time.truncatedTo(ChronoUnit.NANOS)); // 12:30:15.123456789Z
//time.truncatedTo(ChronoUnit.YEARS); // UnsupportedTemporalTypeException
long until (Temporal endExclusive, TemporalUnit unit)
もう一方の時間までの時間量を指定された単位で計算します。
final var time1 = OffsetTime.of(1, 2, 0, 0, ZoneOffset.UTC);
final var time2 = OffsetTime.of(3, 32, 15, 123, ZoneOffset.UTC);
System.out.println(time1); // 01:02Z
System.out.println(time2); // 03:32:15.000000123Z
System.out.println(time1.until(time2, ChronoUnit.HOURS)); // 2
System.out.println(time1.until(time2, ChronoUnit.MINUTES)); // 150
System.out.println(time1.until(time2, ChronoUnit.SECONDS)); // 9015
System.out.println(time1.until(time2, ChronoUnit.NANOS)); // 9015000000123
final var time1 = OffsetTime.of(1, 2, 3, 0, ZoneOffset.UTC);
final var time2 = OffsetTime.of(1, 1, 1, 0, ZoneOffset.UTC);
System.out.println(time1); // 01:02:03Z
System.out.println(time2); // 01:01:01Z
System.out.println(time1.until(time2, ChronoUnit.HOURS)); // 0
System.out.println(time1.until(time2, ChronoUnit.MINUTES)); // -1
System.out.println(time1.until(time2, ChronoUnit.SECONDS)); // -62
System.out.println(time1.until(time2, ChronoUnit.NANOS)); // -62000000000
final var time1 = OffsetTime.of(1, 1, 1, 0, ZoneOffset.ofHours(3));
final var time2 = OffsetTime.of(1, 1, 1, 0, ZoneOffset.ofHours(-5));
System.out.println(time1); // 01:01:01+03:00
System.out.println(time2); // 01:01:01-05:00
System.out.println(time1.until(time2, ChronoUnit.HOURS)); // 8
System.out.println(time1.until(time2, ChronoUnit.MINUTES)); // 480
System.out.println(time1.until(time2, ChronoUnit.SECONDS)); // 28800
System.out.println(time1.until(time2, ChronoUnit.NANOS)); // 28800000000000
OffsetTime with (TemporalAdjuster adjuster)
この時間の調整済のコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30:15Z
// 秒を最大に変更する TemporalAdjuster です。
final var adjuster = new TemporalAdjuster() {
@Override
public Temporal adjustInto(Temporal temporal) {
return temporal.with(ChronoField.SECOND_OF_MINUTE, 59);
}
};
System.out.println(time.with(adjuster)); // 12:30:59Z
OffsetTime with (TemporalField field, long newValue)
指定されたフィールドを新しい値に設定して、この時間のコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 12:30:15.000000123Z
System.out.println(time.with(ChronoField.HOUR_OF_DAY, 23)); // 23:30:15.000000123Z
System.out.println(time.with(ChronoField.MINUTE_OF_HOUR, 59)); // 12:59:15.000000123Z
System.out.println(time.with(ChronoField.SECOND_OF_MINUTE, 30)); // 12:30:30.000000123Z
System.out.println(time.with(ChronoField.NANO_OF_SECOND, 456)); // 12:30:15.000000456Z
System.out.println(time.with(ChronoField.OFFSET_SECONDS, 3600 * 8)); // 12:30:15.000000123+08:00
OffsetTime withHour (int hour)
時の値を変更して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30:15Z
System.out.println(time.withHour(23)); // 23:30:15Z
OffsetTime withMinute (int minute)
分の値を変更して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30:15Z
System.out.println(time.withMinute(59)); // 12:59:15Z
OffsetTime withNano (int nanoOfSecond)
ナノ秒の値を変更して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 123, ZoneOffset.UTC);
System.out.println(time); // 12:30:15.000000123Z
System.out.println(time.withNano(456789)); // 12:30:15.000456789Z
OffsetTime withOffsetSameInstant (ZoneOffset offset)
結果が暗黙の日の同じインスタントを持つようにしながら、指定されたオフセットを使ってこのOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30Z
final var ret = time.withOffsetSameInstant(ZoneOffset.ofHours(4));
System.out.println(ret); // 16:30+04:00
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 12:30+04:00
final var ret = time.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(ret); // 08:30Z
OffsetTime withOffsetSameLocal (ZoneOffset offset)
結果が同じローカル時間を持つようにしながら、指定されたオフセットを使ってこのOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30Z
final var ret = time.withOffsetSameLocal(ZoneOffset.ofHours(4));
System.out.println(ret); // 12:30+04:00
final var time = OffsetTime.of(12, 30, 0, 0, ZoneOffset.ofHours(4));
System.out.println(time); // 12:30+04:00
final var ret = time.withOffsetSameLocal(ZoneOffset.UTC);
System.out.println(ret); // 12:30Z
OffsetTime withSecond (int second)
秒の値を変更して、このOffsetTimeのコピーを返します。
final var time = OffsetTime.of(12, 30, 15, 0, ZoneOffset.UTC);
System.out.println(time); // 12:30:15Z
System.out.println(time.withSecond(59)); // 12:30:59Z
関連記事
- 日付・時刻の基本
- Date, CalendarではなくLocalDateTime, ZonedDateTimeを使おう
- 文字列と日付・時刻の変換
- 日時と曜日の計算
- 現在時刻(日時)の取得いろいろ
- 現在の曜日(DayOfWeek)を取得
- ZoneIdとZoneOffsetの違い
- API 使用例
- Calendar (カレンダー)
- Date (日付・時刻)
- DateTimeException (日付・時刻の例外)
- DateTimeParseException (日付・時刻の解析例外)
- DayOfWeek (曜日)
- Duration (時間の量)
- LocalDate (日付・タイムゾーンなし)
- LocalDateTime (日時・タイムゾーンなし)
- LocalTime (時刻・タイムゾーンなし)
- Month (月)
- Instant (時点)
- OffsetDateTime (日時・オフセットあり)
- Period (日付の量)
- TemporalAdjusters (日時の調整ユーティリティ)
- TimeZone (タイムゾーン)
- Year (年)
- ZonedDateTime (日時・タイムゾーンあり)
- ZoneId (タイムゾーンID)
- ZoneOffset (タイムゾーン・オフセット)