Java : ZonedDateTime (日時・タイムゾーンあり) - API使用例

ZonedDateTime (Java SE 17 & JDK 17)の使用例まとめです。
だいたいのメソッドを網羅済みです。
公式API仕様のおともにどうぞ。


概要

クラス構成

ZonedDateTime は日時を表すクラスです。
また、タイムゾーン情報 (ZoneId) を持ちます。

日時は、

  • 日付 ()
  • 時刻 (ナノ秒)

で構成されます。

インスタンスの生成には of メソッドを使います。

final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo

final var dateTime = ZonedDateTime.of(2021, 4, 14, 13, 30, 15, 123000000, zoneId);
System.out.println(dateTime); // 2021-04-14T13:30:15.123+09:00[Asia/Tokyo]

System.out.println(dateTime.getYear()); // 2021
System.out.println(dateTime.getMonth()); // APRIL
System.out.println(dateTime.getDayOfMonth()); // 14

System.out.println(dateTime.getHour()); // 13
System.out.println(dateTime.getMinute()); // 30
System.out.println(dateTime.getSecond()); // 15
System.out.println(dateTime.getNano()); // 123000000

System.out.println(dateTime.getZone()); // Asia/Tokyo

メソッド

boolean equals (Object obj)

この日付/時間が別の日付/時間と等しいかどうかをチェックします。

final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00Z
System.out.println(dateTime1.equals(dateTime2)); // true
// 日時は同じでZoneIdが違う場合
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.of("Asia/Tokyo"));
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.of("America/Chicago"));

System.out.println(dateTime1); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime2); // 2000-01-01T00:00-06:00[America/Chicago]
System.out.println(dateTime1.equals(dateTime2)); // false
// 日時と時差は同じでZoneIdとZoneOffsetの場合
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.of("Asia/Tokyo"));
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(+9));

System.out.println(dateTime1); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime2); // 2000-01-01T00:00+09:00
System.out.println(dateTime1.equals(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2021, 4, 14, 15, 20, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 15, 21, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-14T15:20Z
System.out.println(dateTime2); // 2021-04-14T15:21Z
System.out.println(dateTime1.equals(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2021, 4, 15, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-15T00:00Z
System.out.println(dateTime2); // 2021-04-14T00:00Z
System.out.println(dateTime1.equals(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2021, 4, 13, 0, 0, 0, 123, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 13, 0, 0, 0, 456, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-13T00:00:00.000000123Z
System.out.println(dateTime2); // 2021-04-13T00:00:00.000000456Z
System.out.println(dateTime1.equals(dateTime2)); // false

String format (DateTimeFormatter formatter)

指定されたフォーマッタを使用してこの日付/時間を書式設定します。

final var dateTime = ZonedDateTime.of(2021, 4, 7, 13, 30, 45, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-07T13:30:45+09:00[Asia/Tokyo]

{
    final var ret1 = dateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
    System.out.println(ret1); // 2021-04-07T13:30:45+09:00[Asia/Tokyo]

    final var ret2 = dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(ret2); // 2021-04-07T13:30:45+09:00

    final var ret3 = dateTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日(E) HH時mm分ss秒 z"));
    System.out.println(ret3); // 2021年04月07日(水) 13時30分45秒 JST
}
{
    System.out.println(Locale.getDefault()); // ja_JP

    final var ret1 = dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL));
    System.out.println(ret1); // 2021年4月7日水曜日 13時30分45秒 日本標準時

    final var ret2 = dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG));
    System.out.println(ret2); // 2021年4月7日 13:30:45 JST

    final var ret3 = dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
    System.out.println(ret3); // 2021/04/07 13:30:45

    final var ret4 = dateTime.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT));
    System.out.println(ret4); // 2021/04/07 13:30
}

static ZonedDateTime from (TemporalAccessor temporal)

時間的オブジェクトからZonedDateTimeのインスタンスを取得します。

final var temporal = OffsetDateTime.of(1999, 1, 2, 12, 30, 0, 0, ZoneOffset.ofHours(9));
System.out.println(temporal); // 1999-01-02T12:30+09:00

System.out.println(ZonedDateTime.from(temporal)); // 1999-01-02T12:30+09:00

int get (TemporalField field)

指定されたフィールドの値をこの日付/時間からintとして取得します。

このAPIを使うより、getYeargetMonthgetHour といったAPIを使うのをおすすめします。

final var dateTime = ZonedDateTime.of(2014, 4, 13, 12, 30, 45, 123, ZoneId.systemDefault());
System.out.println(dateTime); // 2014-04-13T12:30:45.000000123+09:00[Asia/Tokyo]

System.out.println(dateTime.get(ChronoField.YEAR)); // 2014
System.out.println(dateTime.get(ChronoField.MONTH_OF_YEAR)); // 4
System.out.println(dateTime.get(ChronoField.DAY_OF_MONTH)); // 13
System.out.println(dateTime.get(ChronoField.HOUR_OF_DAY)); // 12
System.out.println(dateTime.get(ChronoField.MINUTE_OF_HOUR)); // 30
System.out.println(dateTime.get(ChronoField.SECOND_OF_MINUTE)); // 45
System.out.println(dateTime.get(ChronoField.NANO_OF_SECOND)); // 123
System.out.println(dateTime.get(ChronoField.OFFSET_SECONDS)); // 32400

int getDayOfMonth ()

「月の日」フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getDayOfMonth()); // 1
final var dateTime = ZonedDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-02T00:00Z

System.out.println(dateTime.getDayOfMonth()); // 2
final var dateTime = ZonedDateTime.of(2021, 1, 30, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-30T00:00Z

System.out.println(dateTime.getDayOfMonth()); // 30
final var dateTime = ZonedDateTime.of(2021, 1, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-31T00:00Z

System.out.println(dateTime.getDayOfMonth()); // 31
final var dateTime = ZonedDateTime.of(2021, 2, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-02-01T00:00Z

System.out.println(dateTime.getDayOfMonth()); // 1

DayOfWeek getDayOfWeek ()

列挙型DayOfWeekである曜日フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-03T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getDayOfWeek()); // SUNDAY
final var dateTime = ZonedDateTime.of(2021, 1, 4, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-04T00:00Z

System.out.println(dateTime.getDayOfWeek()); // MONDAY
final var dateTime = ZonedDateTime.of(2021, 1, 5, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-05T00:00Z

System.out.println(dateTime.getDayOfWeek()); // TUESDAY
final var dateTime = ZonedDateTime.of(2021, 1, 6, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-06T00:00Z

System.out.println(dateTime.getDayOfWeek()); // WEDNESDAY
final var dateTime = ZonedDateTime.of(2021, 1, 7, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-07T00:00Z

System.out.println(dateTime.getDayOfWeek()); // THURSDAY
final var dateTime = ZonedDateTime.of(2021, 1, 8, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-08T00:00Z

System.out.println(dateTime.getDayOfWeek()); // FRIDAY
final var dateTime = ZonedDateTime.of(2021, 1, 9, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-09T00:00Z

System.out.println(dateTime.getDayOfWeek()); // SATURDAY
final var dateTime = ZonedDateTime.of(2021, 1, 10, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-10T00:00Z

System.out.println(dateTime.getDayOfWeek()); // SUNDAY

int getDayOfYear ()

「年の日」フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getDayOfYear()); // 1
final var dateTime = ZonedDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-02T00:00Z

System.out.println(dateTime.getDayOfYear()); // 2
final var dateTime = ZonedDateTime.of(2021, 1, 30, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-30T00:00Z

System.out.println(dateTime.getDayOfYear()); // 30
final var dateTime = ZonedDateTime.of(2021, 1, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-31T00:00Z

System.out.println(dateTime.getDayOfYear()); // 31
final var dateTime = ZonedDateTime.of(2021, 2, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-02-01T00:00Z

System.out.println(dateTime.getDayOfYear()); // 32
final var dateTime = ZonedDateTime.of(2021, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-02-02T00:00Z

System.out.println(dateTime.getDayOfYear()); // 33
final var dateTime = ZonedDateTime.of(2021, 12, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-12-31T00:00Z

System.out.println(dateTime.getDayOfYear()); // 365
final var dateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2022-01-01T00:00Z
System.out.println(dateTime.getDayOfYear()); // 1

int getHour ()

時フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 14, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T14:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.getHour()); // 14
final var dateTime = ZonedDateTime.of(2000, 1, 2, 3, 4, 5, 123000000, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-02T03:04:05.123Z
System.out.println(dateTime.getHour()); // 3

long getLong (TemporalField field)

指定されたフィールドの値をこの日付/時間からlongとして取得します。

このAPIを使うより、getYeargetMonthgetHour といったAPIを使うのをおすすめします。

final var dateTime = ZonedDateTime.of(2014, 4, 13, 12, 30, 45, 123, ZoneId.systemDefault());
System.out.println(dateTime); // 2014-04-13T12:30:45.000000123+09:00[Asia/Tokyo]

System.out.println(dateTime.getLong(ChronoField.YEAR)); // 2014
System.out.println(dateTime.getLong(ChronoField.MONTH_OF_YEAR)); // 4
System.out.println(dateTime.getLong(ChronoField.DAY_OF_MONTH)); // 13
System.out.println(dateTime.getLong(ChronoField.HOUR_OF_DAY)); // 12
System.out.println(dateTime.getLong(ChronoField.MINUTE_OF_HOUR)); // 30
System.out.println(dateTime.getLong(ChronoField.SECOND_OF_MINUTE)); // 45
System.out.println(dateTime.getLong(ChronoField.NANO_OF_SECOND)); // 123
System.out.println(dateTime.getLong(ChronoField.OFFSET_SECONDS)); // 32400

int getMinute ()

分フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 13, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T13:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.getMinute()); // 30
final var dateTime = ZonedDateTime.of(2021, 5, 1, 0, 45, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-01T00:45Z

System.out.println(dateTime.getMinute()); // 45

Month getMonth ()

列挙型Monthを使用して、月フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 15, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-15T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getMonth()); // JANUARY
final var dateTime = ZonedDateTime.of(2021, 2, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-02-15T00:00Z

System.out.println(dateTime.getMonth()); // FEBRUARY
final var dateTime = ZonedDateTime.of(2021, 3, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-03-15T00:00Z

System.out.println(dateTime.getMonth()); // MARCH
final var dateTime = ZonedDateTime.of(2021, 12, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-12-15T00:00Z

System.out.println(dateTime.getMonth()); // DECEMBER
final var dateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2022-01-01T00:00Z

System.out.println(dateTime.getMonth()); // JANUARY

int getMonthValue ()

月フィールドを取得します(1-12)。

final var dateTime = ZonedDateTime.of(2021, 1, 15, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-15T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getMonthValue()); // 1
final var dateTime = ZonedDateTime.of(2021, 2, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-02-15T00:00Z

System.out.println(dateTime.getMonthValue()); // 2
final var dateTime = ZonedDateTime.of(2021, 12, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-12-15T00:00Z

System.out.println(dateTime.getMonthValue()); // 12
final var dateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2022-01-01T00:00Z

System.out.println(dateTime.getMonthValue()); // 1

int getNano ()

ナノ秒フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 13, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T13:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.getNano()); // 0
final var dateTime = ZonedDateTime.of(2021, 1, 1, 13, 30, 15, 123456789, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-01T13:30:15.123456789Z

System.out.println(dateTime.getNano()); // 123456789

ZoneOffset getOffset ()

「+01:00」などのゾーン・オフセットを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-01T00:00Z

System.out.println(dateTime.getOffset()); // Z
final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getOffset()); // +09:00
final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHoursMinutes(4, 30));
System.out.println(dateTime); // 2021-01-01T00:00+04:30

System.out.println(dateTime.getOffset()); // +04:30

int getSecond ()

秒フィールドを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 13, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T13:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.getSecond()); // 15
final var dateTime = ZonedDateTime.of(2021, 1, 1, 13, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-01T13:30:45Z

System.out.println(dateTime.getSecond()); // 45

int getYear ()

年フィールドを取得します。

final var dateTime = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 1999-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getYear()); // 1999
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.getYear()); // 2000
final var dateTime = ZonedDateTime.of(-3000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // -3000-01-01T00:00Z

System.out.println(dateTime.getYear()); // -3000
final var dateTime = ZonedDateTime.of(9999, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 9999-01-01T00:00Z

System.out.println(dateTime.getYear()); // 9999

ZoneId getZone ()

Europe/Parisなど、タイムゾーンを取得します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-01T00:00Z

System.out.println(dateTime.getZone()); // Z
final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.getZone()); // Asia/Tokyo
final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHoursMinutes(4, 30));
System.out.println(dateTime); // 2021-01-01T00:00+04:30

System.out.println(dateTime.getZone()); // +04:30

int hashCode ()

この日付/時間のハッシュ・コード。

System.out.println(ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault()).hashCode()); // -400158243
System.out.println(ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).hashCode()); // 4094017
System.out.println(ZonedDateTime.of(2021, 4, 13, 12, 30, 40, 123, ZoneOffset.UTC).hashCode()); // -1324588672
System.out.println(ZonedDateTime.of(LocalDateTime.MIN, ZoneOffset.UTC).hashCode()); // -304793535
System.out.println(ZonedDateTime.of(LocalDateTime.MAX, ZoneOffset.UTC).hashCode()); // 2090566260

boolean isSupported (TemporalField field)

指定されたフィールドがサポートされているかどうかをチェックします。

final var dateTime = ZonedDateTime.of(2014, 4, 13, 12, 30, 45, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2014-04-13T12:30:45.000000123Z

System.out.println(dateTime.isSupported(ChronoField.YEAR)); // true
System.out.println(dateTime.isSupported(ChronoField.MONTH_OF_YEAR)); // true
System.out.println(dateTime.isSupported(ChronoField.DAY_OF_MONTH)); // true
System.out.println(dateTime.isSupported(ChronoField.HOUR_OF_DAY)); // true
System.out.println(dateTime.isSupported(ChronoField.MINUTE_OF_HOUR)); // true
System.out.println(dateTime.isSupported(ChronoField.SECOND_OF_MINUTE)); // true
System.out.println(dateTime.isSupported(ChronoField.NANO_OF_SECOND)); // true
System.out.println(dateTime.isSupported(ChronoField.OFFSET_SECONDS)); // true

boolean isSupported (TemporalUnit unit)

指定された単位がサポートされているかどうかをチェックします。

final var dateTime = ZonedDateTime.of(2014, 4, 13, 12, 30, 45, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2014-04-13T12:30:45.000000123Z

System.out.println(dateTime.isSupported(ChronoUnit.YEARS)); // true
System.out.println(dateTime.isSupported(ChronoUnit.MONTHS)); // true
System.out.println(dateTime.isSupported(ChronoUnit.WEEKS)); // true
System.out.println(dateTime.isSupported(ChronoUnit.DAYS)); // true

System.out.println(dateTime.isSupported(ChronoUnit.HOURS)); // true
System.out.println(dateTime.isSupported(ChronoUnit.MINUTES)); // true
System.out.println(dateTime.isSupported(ChronoUnit.SECONDS)); // true
System.out.println(dateTime.isSupported(ChronoUnit.NANOS)); // true

System.out.println(dateTime.isSupported(ChronoUnit.FOREVER)); // false

ZonedDateTime minus (long amountToSubtract, TemporalUnit unit)

指定された量を減算した、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 4, 13, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-04-13T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minus(1, ChronoUnit.YEARS)); // 1999-04-13T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minus(2, ChronoUnit.MONTHS)); // 2000-02-13T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minus(3, ChronoUnit.DAYS)); // 2000-04-10T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 4, 13, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-04-13T00:00Z

System.out.println(dateTime.minus(1, ChronoUnit.YEARS)); // 1999-04-13T00:00Z
System.out.println(dateTime.minus(2, ChronoUnit.MONTHS)); // 2000-02-13T00:00Z
System.out.println(dateTime.minus(3, ChronoUnit.DAYS)); // 2000-04-10T00:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 10, 20, 30, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T10:20:30.000000123Z

System.out.println(dateTime.minus(1, ChronoUnit.HOURS)); // 2000-01-01T09:20:30.000000123Z
System.out.println(dateTime.minus(2, ChronoUnit.MINUTES)); // 2000-01-01T10:18:30.000000123Z
System.out.println(dateTime.minus(3, ChronoUnit.SECONDS)); // 2000-01-01T10:20:27.000000123Z
System.out.println(dateTime.minus(4, ChronoUnit.NANOS)); // 2000-01-01T10:20:30.000000119Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.minus(1, ChronoUnit.HOURS)); // 1999-12-31T23:00Z
System.out.println(dateTime.minus(365, ChronoUnit.DAYS)); // 1999-01-01T00:00Z
System.out.println(dateTime.minus(3000, ChronoUnit.YEARS)); // -1000-01-01T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 26, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-26T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minus(1, ChronoUnit.DAYS)); // 2020-10-25T03:30+01:00[Europe/Paris]
System.out.println(dateTime.minus(2, ChronoUnit.DAYS)); // 2020-10-24T03:30+02:00[Europe/Paris]

ZonedDateTime minus (TemporalAmount amountToSubtract)

指定された量を減算した、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 4, 13, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-04-13T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minus(Period.ofYears(1))); // 1999-04-13T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minus(Period.ofMonths(2))); // 2000-02-13T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minus(Period.ofDays(3))); // 2000-04-10T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 4, 13, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-04-13T00:00Z

System.out.println(dateTime.minus(Period.ofYears(1))); // 1999-04-13T00:00Z
System.out.println(dateTime.minus(Period.ofMonths(2))); // 2000-02-13T00:00Z
System.out.println(dateTime.minus(Period.ofDays(3))); // 2000-04-10T00:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 10, 20, 30, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T10:20:30.000000123Z

System.out.println(dateTime.minus(Duration.ofHours(1))); // 2000-01-01T09:20:30.000000123Z
System.out.println(dateTime.minus(Duration.ofMinutes(2))); // 2000-01-01T10:18:30.000000123Z
System.out.println(dateTime.minus(Duration.ofSeconds(3))); // 2000-01-01T10:20:27.000000123Z
System.out.println(dateTime.minus(Duration.ofNanos(4))); // 2000-01-01T10:20:30.000000119Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.minus(Duration.ofHours(1))); // 1999-12-31T23:00Z
System.out.println(dateTime.minus(Period.ofDays(365))); // 1999-01-01T00:00Z
System.out.println(dateTime.minus(Period.ofYears(3000))); // -1000-01-01T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 26, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-26T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minus(Period.ofDays(1))); // 2020-10-25T03:30+01:00[Europe/Paris]
System.out.println(dateTime.minus(Period.ofDays(2))); // 2020-10-24T03:30+02:00[Europe/Paris]

ZonedDateTime minusDays (long days)

指定された日数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.minusDays(1)); // 2021-05-19T00:00Z
System.out.println(dateTime.minusDays(2)); // 2021-05-18T00:00Z
System.out.println(dateTime.minusDays(20)); // 2021-04-30T00:00Z
System.out.println(dateTime.minusDays(365)); // 2020-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minusDays(1)); // 2021-05-19T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minusDays(2)); // 2021-05-18T00:00+09:00[Asia/Tokyo]
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 26, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-26T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minusDays(1)); // 2020-10-25T03:30+01:00[Europe/Paris]
System.out.println(dateTime.minusDays(2)); // 2020-10-24T03:30+02:00[Europe/Paris]

ZonedDateTime minusHours (long hours)

指定された時間数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:30Z

System.out.println(dateTime.minusHours(1)); // 2000-01-01T12:30Z
System.out.println(dateTime.minusHours(2)); // 2000-01-01T11:30Z
System.out.println(dateTime.minusHours(13)); // 2000-01-01T00:30Z
System.out.println(dateTime.minusHours(14)); // 1999-12-31T23:30Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30+09:00[Asia/Tokyo]

System.out.println(dateTime.minusHours(1)); // 2000-01-01T12:30+09:00[Asia/Tokyo]
System.out.println(dateTime.minusHours(2)); // 2000-01-01T11:30+09:00[Asia/Tokyo]
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 25, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-25T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minusHours(1)); // 2020-10-25T02:30+01:00[Europe/Paris]
System.out.println(dateTime.minusHours(2)); // 2020-10-25T02:30+02:00[Europe/Paris]
System.out.println(dateTime.minusHours(3)); // 2020-10-25T01:30+02:00[Europe/Paris]

ZonedDateTime minusMinutes (long minutes)

指定された分数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:30Z

System.out.println(dateTime.minusMinutes(1)); // 2000-01-01T13:29Z
System.out.println(dateTime.minusMinutes(2)); // 2000-01-01T13:28Z
System.out.println(dateTime.minusMinutes(30)); // 2000-01-01T13:00Z
System.out.println(dateTime.minusMinutes(31)); // 2000-01-01T12:59Z
System.out.println(dateTime.minusMinutes(60 * 14)); // 1999-12-31T23:30Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30+09:00[Asia/Tokyo]

System.out.println(dateTime.minusMinutes(1)); // 2000-01-01T13:29+09:00[Asia/Tokyo]
System.out.println(dateTime.minusMinutes(2)); // 2000-01-01T13:28+09:00[Asia/Tokyo]

ZonedDateTime minusMonths (long months)

指定された月数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.minusMonths(1)); // 2021-04-20T00:00Z
System.out.println(dateTime.minusMonths(2)); // 2021-03-20T00:00Z
System.out.println(dateTime.minusMonths(12)); // 2020-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minusMonths(1)); // 2021-04-20T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minusMonths(2)); // 2021-03-20T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2007, 3, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2007-03-31T00:00Z

System.out.println(dateTime.minusMonths(1)); // 2007-02-28T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 11, 25, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-11-25T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minusMonths(1)); // 2020-10-25T03:30+01:00[Europe/Paris]
System.out.println(dateTime.minusMonths(2)); // 2020-09-25T03:30+02:00[Europe/Paris]

ZonedDateTime minusNanos (long nanos)

指定されたナノ秒数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:30:15.000000123Z

System.out.println(dateTime.minusNanos(1)); // 2000-01-01T13:30:15.000000122Z
System.out.println(dateTime.minusNanos(2)); // 2000-01-01T13:30:15.000000121Z
System.out.println(dateTime.minusNanos(123)); // 2000-01-01T13:30:15Z
System.out.println(dateTime.minusNanos(124)); // 2000-01-01T13:30:14.999999999Z
System.out.println(dateTime.minusNanos(1000000000L * 60 * 60 * 24 * 365)); // 1999-01-01T13:30:15.000000123Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 123, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30:15.000000123+09:00[Asia/Tokyo]

System.out.println(dateTime.minusNanos(1)); // 2000-01-01T13:30:15.000000122+09:00[Asia/Tokyo]
System.out.println(dateTime.minusNanos(2)); // 2000-01-01T13:30:15.000000121+09:00[Asia/Tokyo]

ZonedDateTime minusSeconds (long seconds)

指定された秒数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:30:15Z

System.out.println(dateTime.minusSeconds(1)); // 2000-01-01T13:30:14Z
System.out.println(dateTime.minusSeconds(2)); // 2000-01-01T13:30:13Z
System.out.println(dateTime.minusSeconds(15)); // 2000-01-01T13:30Z
System.out.println(dateTime.minusSeconds(16)); // 2000-01-01T13:29:59Z
System.out.println(dateTime.minusSeconds(60 * 60)); // 2000-01-01T12:30:15Z
System.out.println(dateTime.minusSeconds(60 * 60 * 24)); // 1999-12-31T13:30:15Z
System.out.println(dateTime.minusSeconds(60 * 60 * 24 * 365)); // 1999-01-01T13:30:15Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.minusSeconds(1)); // 2000-01-01T13:30:14+09:00[Asia/Tokyo]
System.out.println(dateTime.minusSeconds(2)); // 2000-01-01T13:30:13+09:00[Asia/Tokyo]

ZonedDateTime minusWeeks (long weeks)

指定された週数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.minusWeeks(1)); // 2021-05-13T00:00Z
System.out.println(dateTime.minusWeeks(2)); // 2021-05-06T00:00Z
System.out.println(dateTime.minusWeeks(20)); // 2020-12-31T00:00Z
System.out.println(dateTime.minusWeeks(100)); // 2019-06-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minusWeeks(1)); // 2021-05-13T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minusWeeks(2)); // 2021-05-06T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2009, 1, 7, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2009-01-07T00:00Z

System.out.println(dateTime.minusWeeks(1)); // 2008-12-31T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 11, 5, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-11-05T03:30+01:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.minusWeeks(1)); // 2020-10-29T03:30+01:00[Europe/Paris]
System.out.println(dateTime.minusWeeks(2)); // 2020-10-22T03:30+02:00[Europe/Paris]

ZonedDateTime minusYears (long years)

指定された年数を減算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.minusYears(1)); // 2020-05-20T00:00Z
System.out.println(dateTime.minusYears(2)); // 2019-05-20T00:00Z
System.out.println(dateTime.minusYears(10)); // 2011-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.minusYears(1)); // 2020-05-20T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.minusYears(2)); // 2019-05-20T00:00+09:00[Asia/Tokyo]
// うるう年
final var dateTime = ZonedDateTime.of(2020, 2, 29, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2020-02-29T00:00Z

System.out.println(dateTime.minusYears(1)); // 2019-02-28T00:00Z

static ZonedDateTime now ()

デフォルトのタイムゾーンのシステム・クロックから現在の日付/時間を取得します。

System.out.println(ZoneId.systemDefault()); // Asia/Tokyo

System.out.println(ZonedDateTime.now()); // 2021-04-30T18:53:40.132272300+09:00[Asia/Tokyo]

static ZonedDateTime now (Clock clock)

指定されたクロックから現在の日付/時間を取得します。

// 意図的に5日進めたClock
final var clock = Clock.offset(Clock.systemDefaultZone(), Duration.ofDays(5));

System.out.println(ZonedDateTime.now()); // 2021-05-01T19:38:26.972116+09:00[Asia/Tokyo]
System.out.println(ZonedDateTime.now(clock)); // 2021-05-06T19:38:26.975113300+09:00[Asia/Tokyo]

static ZonedDateTime now (ZoneId zone)

指定されたタイムゾーンのシステム・クロックから現在の日付/時間を取得します。

final var ret1 = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(ret1); // 2021-04-30T18:58:47.625037800+09:00[Asia/Tokyo]

final var ret2 = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println(ret2); // 2021-04-30T11:58:47.629038300+02:00[Europe/Paris]

final var ret3 = ZonedDateTime.now(ZoneOffset.UTC);
System.out.println(ret3); // 2021-04-30T09:58:47.630034500Z

static ZonedDateTime of (int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)

年、月、日、時、分、秒、ナノ秒、およびタイムゾーンからZonedDateTimeのインスタンスを取得します。

final var ret1 = ZonedDateTime.of(2100, 2, 28, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(ret1); // 2100-02-28T00:00+09:00[Asia/Tokyo]

final var ret2 = ZonedDateTime.of(2021, 4, 14, 13, 30, 10, 123, ZoneOffset.UTC);
System.out.println(ret2); // 2021-04-14T13:30:10.000000123Z

final var ret3 = ZonedDateTime.of(-999, 12, 1, 23, 59, 59, 999999999, ZoneOffset.UTC);
System.out.println(ret3); // -0999-12-01T23:59:59.999999999Z

//ZonedDateTime.of(2000, 13, 1, 0, 0, 0, 0, ZoneOffset.UTC); // DateTimeException

static ZonedDateTime of (LocalDate date, LocalTime time, ZoneId zone)

ローカルの日付と時間からZonedDateTimeのインスタンスを取得します。

final var date = LocalDate.of(2021, Month.APRIL, 14);
System.out.println(date); // 2021-04-14

final var time = LocalTime.of(13, 30, 10);
System.out.println(time); // 13:30:10

final var ret1 = ZonedDateTime.of(date, time, ZoneOffset.UTC);
System.out.println(ret1); // 2021-04-14T13:30:10Z

final var ret2 = ZonedDateTime.of(date, time, ZoneId.systemDefault());
System.out.println(ret2); // 2021-04-14T13:30:10+09:00[Asia/Tokyo]
final var date = LocalDate.of(2100, Month.FEBRUARY, 28);
System.out.println(date); // 2100-02-28

final var ret = ZonedDateTime.of(date, LocalTime.MIN, ZoneOffset.UTC);
System.out.println(ret); // 2100-02-28T00:00Z
final var ret1 = ZonedDateTime.of(LocalDate.MAX, LocalTime.MAX, ZoneOffset.UTC);
System.out.println(ret1); // +999999999-12-31T23:59:59.999999999Z

final var ret2 = ZonedDateTime.of(LocalDate.MIN, LocalTime.MIN, ZoneOffset.UTC);
System.out.println(ret2); // -999999999-01-01T00:00Z

static ZonedDateTime of (LocalDateTime localDateTime, ZoneId zone)

ローカル日付/時間からZonedDateTimeのインスタンスを取得します。

final var dateTime = LocalDateTime.of(2021, 4, 14, 13, 30);
System.out.println(dateTime); // 2021-04-14T13:30

final var ret1 = ZonedDateTime.of(dateTime, ZoneOffset.UTC);
System.out.println(ret1); // 2021-04-14T13:30Z

final var ret2 = ZonedDateTime.of(dateTime, ZoneId.systemDefault());
System.out.println(ret2); // 2021-04-14T13:30+09:00[Asia/Tokyo]
final var ret1 = ZonedDateTime.of(LocalDateTime.MAX, ZoneOffset.UTC);
System.out.println(ret1); // +999999999-12-31T23:59:59.999999999Z

final var ret2 = ZonedDateTime.of(LocalDateTime.MIN, ZoneOffset.UTC);
System.out.println(ret2); // -999999999-01-01T00:00Z

static ZonedDateTime ofInstant (Instant instant, ZoneId zone)

InstantからZonedDateTimeのインスタンスを取得します。

final var instant = Instant.ofEpochSecond(1617883200);
System.out.println(instant); // 2021-04-08T12:00:00Z

final var dateTime1 = ZonedDateTime.ofInstant(instant, ZoneOffset.UTC);
System.out.println(dateTime1); // 2021-04-08T12:00Z

// Asia/Tokyo は UTC と比べて +9時間の時差
System.out.println(ZoneId.systemDefault()); // Asia/Tokyo

final var dateTime2 = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println(dateTime2); // 2021-04-08T21:00+09:00[Asia/Tokyo]

static ZonedDateTime ofInstant (LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)

ローカル日付/時間とオフセットを組み合せることで形成されるインスタントからZonedDateTimeのインスタンスを取得します。

final var dateTime = LocalDateTime.of(2021, 4, 14, 12, 0);
System.out.println(dateTime); // 2021-04-14T12:00

final var ret1 = ZonedDateTime.ofInstant(dateTime, ZoneOffset.ofHours(4), ZoneOffset.UTC);
System.out.println(ret1); // 2021-04-14T08:00Z

final var ret2 = ZonedDateTime.ofInstant(dateTime, ZoneOffset.ofHours(4), ZoneId.systemDefault());
System.out.println(ret2); // 2021-04-14T17:00+09:00[Asia/Tokyo]

static ZonedDateTime ofLocal (LocalDateTime localDateTime, ZoneId zone, ZoneOffset preferredOffset)

可能であれば優先オフセットを使用して、ローカル日付/時間からZonedDateTimeのインスタンスを取得します。

// Europe/Paris は夏時間・冬時間がありそれぞれオフセットが変わります。
final var zoneId = ZoneId.of("Europe/Paris");

final var localDateTime = LocalDateTime.of(2020, 10, 25, 2, 20);
System.out.println(localDateTime); // 2020-10-25T02:20

final var ret1 = ZonedDateTime.ofLocal(localDateTime, zoneId, ZoneOffset.ofHours(1));
System.out.println(ret1); // 2020-10-25T02:20+01:00[Europe/Paris]

final var ret2 = ZonedDateTime.ofLocal(localDateTime, zoneId, ZoneOffset.ofHours(2));
System.out.println(ret2); // 2020-10-25T02:20+02:00[Europe/Paris]

static ZonedDateTime ofStrict (LocalDateTime localDateTime, ZoneOffset offset, ZoneId zone)

ローカル日付/時間、オフセット、およびゾーンIDの組合せを厳密に検証して、ZonedDateTimeのインスタンスを取得します。

// Europe/Paris は夏時間・冬時間がありそれぞれオフセットが変わります。
final var zoneId = ZoneId.of("Europe/Paris");
System.out.println(zoneId); // Europe/Paris

{
    final var localDateTime = LocalDateTime.of(2020, 10, 25, 3, 30);
    System.out.println(localDateTime); // 2020-10-25T03:30

    final var ret = ZonedDateTime.ofStrict(localDateTime, ZoneOffset.ofHours(1), zoneId);
    System.out.println(ret); // 2020-10-25T03:30+01:00[Europe/Paris]

    //ZonedDateTime.ofStrict(localDateTime, ZoneOffset.ofHours(2), zoneId); // DateTimeException
}
{
    final var localDateTime = LocalDateTime.of(2020, 10, 25, 2, 30);
    System.out.println(localDateTime); // 2020-10-25T02:30

    final var ret1 = ZonedDateTime.ofStrict(localDateTime, ZoneOffset.ofHours(1), zoneId);
    System.out.println(ret1); // 2020-10-25T02:30+01:00[Europe/Paris]

    final var ret2 = ZonedDateTime.ofStrict(localDateTime, ZoneOffset.ofHours(2), zoneId);
    System.out.println(ret2); // 2020-10-25T02:30+02:00[Europe/Paris]
}

static ZonedDateTime parse (CharSequence text)

2007-12-03T10:15:30+01:00[Europe/Paris]などのテキスト文字列からZonedDateTimeのインスタンスを取得します。

final var ret1 = ZonedDateTime.parse("2021-04-14T00:00Z");
System.out.println(ret1); // 2021-04-14T00:00Z

final var ret2 = ZonedDateTime.parse("2021-04-14T13:30:45Z");
System.out.println(ret2); // 2021-04-14T13:30:45Z

final var ret3 = ZonedDateTime.parse("2021-04-14T13:30:45.123456789Z");
System.out.println(ret3); // 2021-04-14T13:30:45.123456789Z

final var ret4 = ZonedDateTime.parse("2020-10-25T00:00+09:00[Asia/Tokyo]");
System.out.println(ret4); // 2020-10-25T00:00+09:00[Asia/Tokyo]

//ZonedDateTime.parse("2021-04-14T00:00"); // DateTimeParseException

static ZonedDateTime parse (CharSequence text, DateTimeFormatter formatter)

特定のフォーマッタを使用して、テキスト文字列からZonedDateTimeのインスタンスを取得します。

final var ret1 = ZonedDateTime.parse(
        "2021-04-14T12:30:45Z",
        DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(ret1); // 2021-04-14T12:30:45Z

final var ret2 = ZonedDateTime.parse(
        "2020-04-30T01:02:03.123+09:00[Asia/Tokyo]",
        DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(ret2); // 2020-04-30T01:02:03.123+09:00[Asia/Tokyo]

final var ret3 = ZonedDateTime.parse(
        "2020-04-30T12:30-05:00",
        DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(ret3); // 2020-04-30T12:30-05:00
final var ret = ZonedDateTime.parse(
        "2021年04月07日(水) 13時30分45秒 JST",
        DateTimeFormatter.ofPattern("yyyy年MM月dd日(E) HH時mm分ss秒 z"));
System.out.println(ret); // 2021-04-07T13:30:45+09:00[Asia/Tokyo]
System.out.println(Locale.getDefault()); // ja_JP

final var ret1 = ZonedDateTime.parse(
        "2021年4月7日水曜日 13時30分45秒 日本標準時",
        DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL));
System.out.println(ret1); // 2021-04-07T13:30:45+09:00[Asia/Tokyo]

final var ret2 = ZonedDateTime.parse(
        "2021年4月30日 12:00:00 JST",
        DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG));
System.out.println(ret2); // 2021-04-30T12:00+09:00[Asia/Tokyo]

ZonedDateTime plus (long amountToAdd, TemporalUnit unit)

指定された量を加算した、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plus(1, ChronoUnit.YEARS)); // 2001-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plus(2, ChronoUnit.MONTHS)); // 2000-03-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plus(3, ChronoUnit.DAYS)); // 2000-01-04T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.plus(1, ChronoUnit.YEARS)); // 2001-01-01T00:00Z
System.out.println(dateTime.plus(2, ChronoUnit.MONTHS)); // 2000-03-01T00:00Z
System.out.println(dateTime.plus(3, ChronoUnit.DAYS)); // 2000-01-04T00:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 10, 20, 30, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T10:20:30.000000123Z

System.out.println(dateTime.plus(1, ChronoUnit.HOURS)); // 2000-01-01T11:20:30.000000123Z
System.out.println(dateTime.plus(2, ChronoUnit.MINUTES)); // 2000-01-01T10:22:30.000000123Z
System.out.println(dateTime.plus(3, ChronoUnit.SECONDS)); // 2000-01-01T10:20:33.000000123Z
System.out.println(dateTime.plus(4, ChronoUnit.NANOS)); // 2000-01-01T10:20:30.000000127Z
final var dateTime = ZonedDateTime.of(1999, 12, 31, 23, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 1999-12-31T23:00Z

System.out.println(dateTime.plus(1, ChronoUnit.HOURS)); // 2000-01-01T00:00Z
System.out.println(dateTime.plus(367, ChronoUnit.DAYS)); // 2001-01-01T23:00Z
System.out.println(dateTime.plus(3000, ChronoUnit.YEARS)); // 4999-12-31T23:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 24, 2, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-24T02:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plus(1, ChronoUnit.DAYS)); // 2020-10-25T02:30+02:00[Europe/Paris]
System.out.println(dateTime.plus(2, ChronoUnit.DAYS)); // 2020-10-26T02:30+01:00[Europe/Paris]

ZonedDateTime plus (TemporalAmount amountToAdd)

指定された量を加算した、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plus(Period.ofYears(1))); // 2001-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plus(Period.ofMonths(2))); // 2000-03-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plus(Period.ofDays(3))); // 2000-01-04T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.plus(Period.ofYears(1))); // 2001-01-01T00:00Z
System.out.println(dateTime.plus(Period.ofMonths(2))); // 2000-03-01T00:00Z
System.out.println(dateTime.plus(Period.ofDays(3))); // 2000-01-04T00:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 10, 20, 30, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T10:20:30.000000123Z

System.out.println(dateTime.plus(Duration.ofHours(1))); // 2000-01-01T11:20:30.000000123Z
System.out.println(dateTime.plus(Duration.ofMinutes(2))); // 2000-01-01T10:22:30.000000123Z
System.out.println(dateTime.plus(Duration.ofSeconds(3))); // 2000-01-01T10:20:33.000000123Z
System.out.println(dateTime.plus(Duration.ofNanos(4))); // 2000-01-01T10:20:30.000000127Z
final var dateTime = ZonedDateTime.of(1999, 12, 31, 23, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 1999-12-31T23:00Z

System.out.println(dateTime.plus(Duration.ofHours(1))); // 2000-01-01T00:00Z
System.out.println(dateTime.plus(Period.ofDays(367))); // 2001-01-01T23:00Z
System.out.println(dateTime.plus(Period.ofYears(3000))); // 4999-12-31T23:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 24, 2, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-24T02:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plus(Period.ofDays(1))); // 2020-10-25T02:30+02:00[Europe/Paris]
System.out.println(dateTime.plus(Period.ofDays(2))); // 2020-10-26T02:30+01:00[Europe/Paris]

ZonedDateTime plusDays (long days)

指定された日数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.plusDays(1)); // 2021-05-21T00:00Z
System.out.println(dateTime.plusDays(2)); // 2021-05-22T00:00Z
System.out.println(dateTime.plusDays(12)); // 2021-06-01T00:00Z
System.out.println(dateTime.plusDays(365)); // 2022-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plusDays(1)); // 2021-05-21T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plusDays(2)); // 2021-05-22T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2008, 12, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2008-12-31T00:00Z

System.out.println(dateTime.plusDays(1)); // 2009-01-01T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 24, 2, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-24T02:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plusDays(1)); // 2020-10-25T02:30+02:00[Europe/Paris]
System.out.println(dateTime.plusDays(2)); // 2020-10-26T02:30+01:00[Europe/Paris]

ZonedDateTime plusHours (long hours)

指定された時間数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

System.out.println(dateTime.plusHours(1)); // 2000-01-01T01:00Z
System.out.println(dateTime.plusHours(2)); // 2000-01-01T02:00Z
System.out.println(dateTime.plusHours(3)); // 2000-01-01T03:00Z
System.out.println(dateTime.plusHours(24)); // 2000-01-02T00:00Z
System.out.println(dateTime.plusHours(25)); // 2000-01-02T01:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plusHours(1)); // 2000-01-01T01:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plusHours(2)); // 2000-01-01T02:00+09:00[Asia/Tokyo]
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 25, 1, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-25T01:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plusHours(1)); // 2020-10-25T02:30+02:00[Europe/Paris]
System.out.println(dateTime.plusHours(2)); // 2020-10-25T02:30+01:00[Europe/Paris]
System.out.println(dateTime.plusHours(3)); // 2020-10-25T03:30+01:00[Europe/Paris]

ZonedDateTime plusMinutes (long minutes)

指定された分数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(1999, 1, 1, 13, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 1999-01-01T13:30Z

System.out.println(dateTime.plusMinutes(1)); // 1999-01-01T13:31Z
System.out.println(dateTime.plusMinutes(2)); // 1999-01-01T13:32Z
System.out.println(dateTime.plusMinutes(30)); // 1999-01-01T14:00Z
System.out.println(dateTime.plusMinutes(31)); // 1999-01-01T14:01Z
System.out.println(dateTime.plusMinutes(60 * 24)); // 1999-01-02T13:30Z
System.out.println(dateTime.plusMinutes(60 * 24 * 365)); // 2000-01-01T13:30Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30+09:00[Asia/Tokyo]

System.out.println(dateTime.plusMinutes(1)); // 2000-01-01T13:31+09:00[Asia/Tokyo]
System.out.println(dateTime.plusMinutes(2)); // 2000-01-01T13:32+09:00[Asia/Tokyo]

ZonedDateTime plusMonths (long months)

指定された月数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.plusMonths(1)); // 2021-06-20T00:00Z
System.out.println(dateTime.plusMonths(2)); // 2021-07-20T00:00Z
System.out.println(dateTime.plusMonths(12)); // 2022-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plusMonths(1)); // 2021-06-20T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plusMonths(2)); // 2021-07-20T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2007, 3, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2007-03-31T00:00Z

System.out.println(dateTime.plusMonths(1)); // 2007-04-30T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 8, 25, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-08-25T03:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plusMonths(1)); // 2020-09-25T03:30+02:00[Europe/Paris]
System.out.println(dateTime.plusMonths(2)); // 2020-10-25T03:30+01:00[Europe/Paris]

ZonedDateTime plusNanos (long nanos)

指定されたナノ秒数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:30:15.000000123Z

System.out.println(dateTime.plusNanos(1)); // 2000-01-01T13:30:15.000000124Z
System.out.println(dateTime.plusNanos(2)); // 2000-01-01T13:30:15.000000125Z
System.out.println(dateTime.plusNanos(1000000000L - 124)); // 2000-01-01T13:30:15.999999999Z
System.out.println(dateTime.plusNanos(1000000000L - 123)); // 2000-01-01T13:30:16Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 123, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30:15.000000123+09:00[Asia/Tokyo]

System.out.println(dateTime.plusNanos(1)); // 2000-01-01T13:30:15.000000124+09:00[Asia/Tokyo]
System.out.println(dateTime.plusNanos(2)); // 2000-01-01T13:30:15.000000125+09:00[Asia/Tokyo]

ZonedDateTime plusSeconds (long seconds)

指定された秒数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(1999, 1, 1, 13, 30, 15, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 1999-01-01T13:30:15Z

System.out.println(dateTime.plusSeconds(1)); // 1999-01-01T13:30:16Z
System.out.println(dateTime.plusSeconds(2)); // 1999-01-01T13:30:17Z
System.out.println(dateTime.plusSeconds(45)); // 1999-01-01T13:31Z
System.out.println(dateTime.plusSeconds(46)); // 1999-01-01T13:31:01Z
System.out.println(dateTime.plusSeconds(60 + 45)); // 1999-01-01T13:32Z
System.out.println(dateTime.plusSeconds(60 * 60)); // 1999-01-01T14:30:15Z
System.out.println(dateTime.plusSeconds(60 * 60 * 24)); // 1999-01-02T13:30:15Z
System.out.println(dateTime.plusSeconds(60 * 60 * 24 * 365)); // 2000-01-01T13:30:15Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 30, 15, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T13:30:15+09:00[Asia/Tokyo]

System.out.println(dateTime.plusSeconds(1)); // 2000-01-01T13:30:16+09:00[Asia/Tokyo]
System.out.println(dateTime.plusSeconds(2)); // 2000-01-01T13:30:17+09:00[Asia/Tokyo]

ZonedDateTime plusWeeks (long weeks)

指定された週数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.plusWeeks(1)); // 2021-05-27T00:00Z
System.out.println(dateTime.plusWeeks(2)); // 2021-06-03T00:00Z
System.out.println(dateTime.plusWeeks(20)); // 2021-10-07T00:00Z
System.out.println(dateTime.plusWeeks(100)); // 2023-04-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plusWeeks(1)); // 2021-05-27T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plusWeeks(2)); // 2021-06-03T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2008, 12, 31, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2008-12-31T00:00Z

System.out.println(dateTime.plusWeeks(1)); // 2009-01-07T00:00Z
// タイムゾーンが影響する例
final var zoneId = ZoneId.of("Europe/Paris");

final var dateTime = ZonedDateTime.of(2020, 10, 15, 3, 30, 0, 0, zoneId);
System.out.println(dateTime); // 2020-10-15T03:30+02:00[Europe/Paris]

// オフセットが時間によって変わります。
System.out.println(dateTime.plusWeeks(1)); // 2020-10-22T03:30+02:00[Europe/Paris]
System.out.println(dateTime.plusWeeks(2)); // 2020-10-29T03:30+01:00[Europe/Paris]

ZonedDateTime plusYears (long years)

指定された年数を加算して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-20T00:00Z

System.out.println(dateTime.plusYears(1)); // 2022-05-20T00:00Z
System.out.println(dateTime.plusYears(2)); // 2023-05-20T00:00Z
System.out.println(dateTime.plusYears(10)); // 2031-05-20T00:00Z
final var dateTime = ZonedDateTime.of(2021, 5, 20, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-05-20T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.plusYears(1)); // 2022-05-20T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.plusYears(2)); // 2023-05-20T00:00+09:00[Asia/Tokyo]
// うるう年
final var dateTime = ZonedDateTime.of(2008, 2, 29, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2008-02-29T00:00Z
System.out.println(dateTime.plusYears(1)); // 2009-02-28T00:00Z

<R> R query (TemporalQuery<R> query)

指定された問合せを使用してこの日付/時間を問い合わせます。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-14T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.query(TemporalQueries.localDate())); // 2021-04-14
System.out.println(dateTime.query(TemporalQueries.localTime())); // 12:30
System.out.println(dateTime.query(TemporalQueries.zoneId())); // Asia/Tokyo
System.out.println(dateTime.query(TemporalQueries.precision())); // Nanos

ValueRange range (TemporalField field)

指定されたフィールドの有効な値の範囲を取得します。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T00:00Z
System.out.println(dateTime.range(ChronoField.YEAR)); // -999999999 - 999999999
System.out.println(dateTime.range(ChronoField.MONTH_OF_YEAR)); // 1 - 12
System.out.println(dateTime.range(ChronoField.DAY_OF_MONTH)); // 1 - 30

System.out.println(dateTime.range(ChronoField.HOUR_OF_DAY)); // 0 - 23
System.out.println(dateTime.range(ChronoField.MINUTE_OF_HOUR)); // 0 - 59
System.out.println(dateTime.range(ChronoField.SECOND_OF_MINUTE)); // 0 - 59
System.out.println(dateTime.range(ChronoField.NANO_OF_SECOND)); // 0 - 999999999

System.out.println(dateTime.range(ChronoField.OFFSET_SECONDS)); // -64800 - 64800
final var dateTime1 = ZonedDateTime.of(1999, 2, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime1); // 1999-02-01T00:00Z
System.out.println(dateTime1.range(ChronoField.DAY_OF_MONTH)); // 1 - 28

// うるう年
final var dateTime2 = ZonedDateTime.of(2000, 2, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime2); // 2000-02-01T00:00Z
System.out.println(dateTime2.range(ChronoField.DAY_OF_MONTH)); // 1 - 29

LocalDate toLocalDate ()

この日付/時間のLocalDate部分を取得します。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30:45Z

System.out.println(dateTime.toLocalDate()); // 2021-04-14
final var dateTime = ZonedDateTime.of(1999, 1, 1, 23, 59, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 1999-01-01T23:59+09:00[Asia/Tokyo]

System.out.println(dateTime.toLocalDate()); // 1999-01-01

LocalDateTime toLocalDateTime ()

この日付/時間のLocalDateTime部分を取得します。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30:45Z

System.out.println(dateTime.toLocalDateTime()); // 2021-04-14T12:30:45
final var dateTime = ZonedDateTime.of(1999, 1, 1, 23, 59, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 1999-01-01T23:59+09:00[Asia/Tokyo]

System.out.println(dateTime.toLocalDateTime()); // 1999-01-01T23:59

LocalTime toLocalTime ()

この日付/時間のLocalTime部分を取得します。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30:45Z

System.out.println(dateTime.toLocalTime()); // 12:30:45
final var dateTime = ZonedDateTime.of(1999, 1, 1, 23, 59, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 1999-01-01T23:59+09:00[Asia/Tokyo]

System.out.println(dateTime.toLocalTime()); // 23:59

OffsetDateTime toOffsetDateTime ()

この日付/時間をOffsetDateTimeに変換します。

final var dateTime = ZonedDateTime.of(1999, 1, 1, 23, 59, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 1999-01-01T23:59+09:00[Asia/Tokyo]

System.out.println(dateTime.toOffsetDateTime()); // 1999-01-01T23:59+09:00
final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30:45Z

System.out.println(dateTime.toOffsetDateTime()); // 2021-04-14T12:30:45Z

String toString ()

この日付/時間をStringとして出力します(2007-12-03T10:15:30+01:00[Europe/Paris]など)。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 45, 0, ZoneId.systemDefault());
System.out.println(dateTime.toString()); // 2021-04-14T12:30:45+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 12, 1, 23, 59, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime.toString()); // 2000-12-01T23:59Z
final var dateTime1 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 123000000, ZoneOffset.UTC);
System.out.println(dateTime1.toString()); // 1999-01-01T00:00:00.123Z

final var dateTime2 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 123000, ZoneOffset.UTC);
System.out.println(dateTime2.toString()); // 1999-01-01T00:00:00.000123Z

final var dateTime3 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 123, ZoneOffset.UTC);
System.out.println(dateTime3.toString()); // 1999-01-01T00:00:00.000000123Z

ZonedDateTime truncatedTo (TemporalUnit unit)

時間が切り捨てられた、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 15, 123456789, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30:15.123456789Z

System.out.println(dateTime.truncatedTo(ChronoUnit.DAYS)); // 2021-04-14T00:00Z

System.out.println(dateTime.truncatedTo(ChronoUnit.HOURS)); // 2021-04-14T12:00Z
System.out.println(dateTime.truncatedTo(ChronoUnit.MINUTES)); // 2021-04-14T12:30Z
System.out.println(dateTime.truncatedTo(ChronoUnit.SECONDS)); // 2021-04-14T12:30:15Z
System.out.println(dateTime.truncatedTo(ChronoUnit.NANOS)); // 2021-04-14T12:30:15.123456789Z

//dateTime.truncatedTo(ChronoUnit.YEARS); // UnsupportedTemporalTypeException
//dateTime.truncatedTo(ChronoUnit.MONTHS); // UnsupportedTemporalTypeException
final var dateTime = ZonedDateTime.of(2000, 2, 3, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-02-03T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.truncatedTo(ChronoUnit.DAYS)); // 2000-02-03T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.truncatedTo(ChronoUnit.HOURS)); // 2000-02-03T12:00+09:00[Asia/Tokyo]

long until (Temporal endExclusive, TemporalUnit unit)

もう一方の日付/時間までの時間量を指定された単位で計算します。

final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2001, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2001-02-02T00:00Z

System.out.println(dateTime1.until(dateTime2, ChronoUnit.YEARS)); // 1
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MONTHS)); // 13
System.out.println(dateTime1.until(dateTime2, ChronoUnit.DAYS)); // 398
System.out.println(dateTime1.until(dateTime2, ChronoUnit.HOURS)); // 9552
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MINUTES)); // 573120
System.out.println(dateTime1.until(dateTime2, ChronoUnit.SECONDS)); // 34387200
System.out.println(dateTime1.until(dateTime2, ChronoUnit.NANOS)); // 34387200000000000
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime1); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime2); // 2000-01-01T00:00Z

System.out.println(dateTime1.until(dateTime2, ChronoUnit.YEARS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MONTHS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.DAYS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.HOURS)); // 9
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MINUTES)); // 540
System.out.println(dateTime1.until(dateTime2, ChronoUnit.SECONDS)); // 32400
System.out.println(dateTime1.until(dateTime2, ChronoUnit.NANOS)); // 32400000000000
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 1, 2, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 3, 32, 15, 123, ZoneOffset.UTC);
System.out.println(dateTime1); // 2000-01-01T01:02Z
System.out.println(dateTime2); // 2000-01-01T03:32:15.000000123Z

System.out.println(dateTime1.until(dateTime2, ChronoUnit.YEARS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MONTHS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.DAYS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.HOURS)); // 2
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MINUTES)); // 150
System.out.println(dateTime1.until(dateTime2, ChronoUnit.SECONDS)); // 9015
System.out.println(dateTime1.until(dateTime2, ChronoUnit.NANOS)); // 9015000000123
final var dateTime1 = ZonedDateTime.of(2012, 8, 14, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2012, 6, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime1); // 2012-08-14T00:00Z
System.out.println(dateTime2); // 2012-06-15T00:00Z

System.out.println(dateTime1.until(dateTime2, ChronoUnit.YEARS)); // 0
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MONTHS)); // -1
System.out.println(dateTime1.until(dateTime2, ChronoUnit.DAYS)); // -60
System.out.println(dateTime1.until(dateTime2, ChronoUnit.HOURS)); // -1440
System.out.println(dateTime1.until(dateTime2, ChronoUnit.MINUTES)); // -86400
System.out.println(dateTime1.until(dateTime2, ChronoUnit.SECONDS)); // -5184000
System.out.println(dateTime1.until(dateTime2, ChronoUnit.NANOS)); // -5184000000000000

ZonedDateTime with (TemporalAdjuster adjuster)

この日付/時間の調整済のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 15, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-15T00:00Z

System.out.println(dateTime.with(TemporalAdjusters.firstDayOfMonth())); // 2000-01-01T00:00Z
System.out.println(dateTime.with(TemporalAdjusters.lastDayOfMonth())); // 2000-01-31T00:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-14T12:30Z

System.out.println(dateTime.with(Year.of(1999))); // 1999-04-14T12:30Z
System.out.println(dateTime.with(Month.JANUARY)); // 2021-01-14T12:30Z
System.out.println(dateTime.with(LocalTime.MAX)); // 2021-04-14T23:59:59.999999999Z
System.out.println(dateTime.with(LocalDate.MIN)); // -999999999-01-01T12:30Z
final var dateTime = ZonedDateTime.of(2021, 4, 14, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-14T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.with(Year.of(3000))); // 3000-04-14T12:30+09:00[Asia/Tokyo]
System.out.println(dateTime.with(Month.FEBRUARY)); // 2021-02-14T12:30+09:00[Asia/Tokyo]

ZonedDateTime with (TemporalField field, long newValue)

指定されたフィールドを新しい値に設定して、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2020, 1, 2, 12, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2020-01-02T12:00Z

System.out.println(dateTime.with(ChronoField.YEAR, 1999)); // 1999-01-02T12:00Z
System.out.println(dateTime.with(ChronoField.MONTH_OF_YEAR, 12)); // 2020-12-02T12:00Z
System.out.println(dateTime.with(ChronoField.DAY_OF_MONTH, 30)); // 2020-01-30T12:00Z
final var dateTime = ZonedDateTime.of(1999, 1, 1, 12, 30, 45, 123000000, ZoneOffset.UTC);
System.out.println(dateTime); // 1999-01-01T12:30:45.123Z

System.out.println(dateTime.with(ChronoField.HOUR_OF_DAY, 23)); // 1999-01-01T23:30:45.123Z
System.out.println(dateTime.with(ChronoField.MINUTE_OF_HOUR, 59)); // 1999-01-01T12:59:45.123Z
System.out.println(dateTime.with(ChronoField.SECOND_OF_MINUTE, 0)); // 1999-01-01T12:30:00.123Z
System.out.println(dateTime.with(ChronoField.NANO_OF_SECOND, 456)); // 1999-01-01T12:30:45.000000456Z
final var dateTime = ZonedDateTime.of(2020, 1, 2, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2020-01-02T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.with(ChronoField.YEAR, 1999)); // 1999-01-02T12:30+09:00[Asia/Tokyo]
System.out.println(dateTime.with(ChronoField.MONTH_OF_YEAR, 12)); // 2020-12-02T12:30+09:00[Asia/Tokyo]
System.out.println(dateTime.with(ChronoField.DAY_OF_MONTH, 30)); // 2020-01-30T12:30+09:00[Asia/Tokyo]

ZonedDateTime withDayOfMonth (int dayOfMonth)

日の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T00:00Z

System.out.println(dateTime.withDayOfMonth(1)); // 2021-04-01T00:00Z
System.out.println(dateTime.withDayOfMonth(2)); // 2021-04-02T00:00Z
System.out.println(dateTime.withDayOfMonth(29)); // 2021-04-29T00:00Z
System.out.println(dateTime.withDayOfMonth(30)); // 2021-04-30T00:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.withDayOfMonth(1)); // 2021-04-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withDayOfMonth(2)); // 2021-04-02T00:00+09:00[Asia/Tokyo]

ZonedDateTime withDayOfYear (int dayOfYear)

「年の日」を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T00:00Z

System.out.println(dateTime.withDayOfYear(1)); // 2021-01-01T00:00Z
System.out.println(dateTime.withDayOfYear(2)); // 2021-01-02T00:00Z
System.out.println(dateTime.withDayOfYear(30)); // 2021-01-30T00:00Z
System.out.println(dateTime.withDayOfYear(31)); // 2021-01-31T00:00Z
System.out.println(dateTime.withDayOfYear(32)); // 2021-02-01T00:00Z
System.out.println(dateTime.withDayOfYear(33)); // 2021-02-02T00:00Z

System.out.println(dateTime.withDayOfYear(365)); // 2021-12-31T00:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.withDayOfYear(1)); // 2021-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withDayOfYear(2)); // 2021-01-02T00:00+09:00[Asia/Tokyo]

ZonedDateTime withEarlierOffsetAtOverlap ()

ゾーン・オフセットを、ローカル時系列のオーバーラップ時における2つの有効なオフセットのうちの早い方に変更して、この日付/時間のコピーを返します。

final var zoneId = ZoneId.of("Europe/Paris");
final var local = LocalDateTime.of(2020, 10, 25, 2, 0);
System.out.println(local); // 2020-10-25T02:00

{
    final var dateTime = ZonedDateTime.ofLocal(local, zoneId, ZoneOffset.ofHours(1));
    System.out.println(dateTime); // 2020-10-25T02:00+01:00[Europe/Paris]
    System.out.println(dateTime.withEarlierOffsetAtOverlap()); // 2020-10-25T02:00+02:00[Europe/Paris]
}
{
    final var dateTime = ZonedDateTime.ofLocal(local, zoneId, ZoneOffset.ofHours(2));
    System.out.println(dateTime); // 2020-10-25T02:00+02:00[Europe/Paris]
    System.out.println(dateTime.withEarlierOffsetAtOverlap()); // 2020-10-25T02:00+02:00[Europe/Paris]
}

ZonedDateTime withFixedOffsetZone ()

ゾーンIDをオフセットに設定して、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.withFixedOffsetZone()); // 2021-01-01T00:00+09:00
final var dateTime = ZonedDateTime.of(2021, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-01-01T00:00Z

System.out.println(dateTime.withFixedOffsetZone()); // 2021-01-01T00:00Z

ZonedDateTime withHour (int hour)

時の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T12:30Z

System.out.println(dateTime.withHour(0)); // 2000-01-01T00:30Z
System.out.println(dateTime.withHour(23)); // 2000-01-01T23:30Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.withHour(0)); // 2000-01-01T00:30+09:00[Asia/Tokyo]
System.out.println(dateTime.withHour(23)); // 2000-01-01T23:30+09:00[Asia/Tokyo]

ZonedDateTime withLaterOffsetAtOverlap ()

ゾーン・オフセットを、ローカル時系列のオーバーラップ時における2つの有効なオフセットのうちの遅い方に変更して、この日付/時間のコピーを返します。

final var zoneId = ZoneId.of("Europe/Paris");

{
    final var dateTime = ZonedDateTime.of(2020, 10, 25, 1, 0, 0, 0, zoneId);
    System.out.println(dateTime); // 2020-10-25T01:00+02:00[Europe/Paris]

    System.out.println(dateTime.withLaterOffsetAtOverlap()); // 2020-10-25T01:00+02:00[Europe/Paris]
}
{
    final var dateTime = ZonedDateTime.of(2020, 10, 25, 2, 0, 0, 0, zoneId);
    System.out.println(dateTime); // 2020-10-25T02:00+02:00[Europe/Paris]

    System.out.println(dateTime.withLaterOffsetAtOverlap()); // 2020-10-25T02:00+01:00[Europe/Paris]
}

ZonedDateTime withMinute (int minute)

分の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T12:30Z

System.out.println(dateTime.withMinute(0)); // 2000-01-01T12:00Z
System.out.println(dateTime.withMinute(59)); // 2000-01-01T12:59Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T12:30+09:00[Asia/Tokyo]

System.out.println(dateTime.withMinute(0)); // 2000-01-01T12:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withMinute(59)); // 2000-01-01T12:59+09:00[Asia/Tokyo]

ZonedDateTime withMonth (int month)

月の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T00:00Z

System.out.println(dateTime.withMonth(1)); // 2021-01-08T00:00Z
System.out.println(dateTime.withMonth(2)); // 2021-02-08T00:00Z
System.out.println(dateTime.withMonth(11)); // 2021-11-08T00:00Z
System.out.println(dateTime.withMonth(12)); // 2021-12-08T00:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.withMonth(1)); // 2021-01-08T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withMonth(2)); // 2021-02-08T00:00+09:00[Asia/Tokyo]

ZonedDateTime withNano (int nanoOfSecond)

ナノ秒の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 123, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00:00.000000123Z

System.out.println(dateTime.withNano(0)); // 2000-01-01T00:00Z
System.out.println(dateTime.withNano(999999999)); // 2000-01-01T00:00:00.999999999Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 123, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00:00.000000123+09:00[Asia/Tokyo]

System.out.println(dateTime.withNano(0)); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withNano(999999999)); // 2000-01-01T00:00:00.999999999+09:00[Asia/Tokyo]

ZonedDateTime withSecond (int second)

秒の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 45, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T12:30:45Z

System.out.println(dateTime.withSecond(0)); // 2000-01-01T12:30Z
System.out.println(dateTime.withSecond(1)); // 2000-01-01T12:30:01Z
System.out.println(dateTime.withSecond(59)); // 2000-01-01T12:30:59Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 12, 30, 45, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T12:30:45+09:00[Asia/Tokyo]

System.out.println(dateTime.withSecond(0)); // 2000-01-01T12:30+09:00[Asia/Tokyo]
System.out.println(dateTime.withSecond(1)); // 2000-01-01T12:30:01+09:00[Asia/Tokyo]
System.out.println(dateTime.withSecond(59)); // 2000-01-01T12:30:59+09:00[Asia/Tokyo]

ZonedDateTime withYear (int year)

年の値を変更して、このZonedDateTimeのコピーを返します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T00:00Z

System.out.println(dateTime.withYear(1999)); // 1999-04-08T00:00Z
System.out.println(dateTime.withYear(-999)); // -0999-04-08T00:00Z
System.out.println(dateTime.withYear(2030)); // 2030-04-08T00:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime.withYear(1999)); // 1999-04-08T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime.withYear(-999)); // -0999-04-08T00:00+09:18:59[Asia/Tokyo]
System.out.println(dateTime.withYear(2030)); // 2030-04-08T00:00+09:00[Asia/Tokyo]

ZonedDateTime withZoneSameInstant (ZoneId zone)

インスタントを保持したまま、別のタイムゾーンを使ってこの日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

final var ret = dateTime.withZoneSameInstant(ZoneId.systemDefault());
System.out.println(ret); // 2000-01-01T09:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]

final var ret = dateTime.withZoneSameInstant(ZoneOffset.UTC);
System.out.println(ret); // 1999-12-31T15:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(-4));
System.out.println(dateTime); // 2000-01-01T00:00-04:00

final var ret = dateTime.withZoneSameInstant(ZoneOffset.UTC);
System.out.println(ret); // 2000-01-01T04:00Z

ZonedDateTime withZoneSameLocal (ZoneId zone)

可能であればローカル日付/時間を保持したまま、別のタイムゾーンを使って、この日付/時間のコピーを返します。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

final var ret = dateTime.withZoneSameLocal(ZoneId.systemDefault());
System.out.println(ret); // 2000-01-01T00:00+09:00[Asia/Tokyo]
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2000-01-01T00:00+09:00[Asia/Tokyo]

final var ret = dateTime.withZoneSameLocal(ZoneOffset.UTC);
System.out.println(ret); // 2000-01-01T00:00Z
final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(-4));
System.out.println(dateTime); // 2000-01-01T00:00-04:00

final var ret = dateTime.withZoneSameLocal(ZoneOffset.UTC);
System.out.println(ret); // 2000-01-01T00:00Z

ChronoZonedDateTimeで宣言されたメソッド

int compareTo ​(ChronoZonedDateTime<?> other)

暦を含めて、この日付/時間を別の日付/時間と比較します。

final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00Z
System.out.println(dateTime1.compareTo(dateTime2)); // 0
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime1.compareTo(dateTime2)); // 1
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(4));
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(1));

System.out.println(dateTime1); // 2000-01-01T00:00+04:00
System.out.println(dateTime2); // 2000-01-01T00:00+01:00
System.out.println(dateTime1.compareTo(dateTime2)); // -1
final var dateTime1 = ZonedDateTime.of(2021, 4, 14, 15, 20, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 15, 21, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-14T15:20Z
System.out.println(dateTime2); // 2021-04-14T15:21Z
System.out.println(dateTime1.compareTo(dateTime2)); // -1
final var dateTime1 = ZonedDateTime.of(2021, 4, 15, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-15T00:00Z
System.out.println(dateTime2); // 2021-04-14T00:00Z
System.out.println(dateTime1.compareTo(dateTime2)); // 1
final var dateTime1 = ZonedDateTime.of(2021, 4, 15, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(1999, 1, 1, 23, 59, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-15T00:00Z
System.out.println(dateTime2); // 1999-01-01T23:59Z
System.out.println(dateTime1.compareTo(dateTime2)); // 1
final var dateTime1 = ZonedDateTime.of(1999, 1, 1, 0, 0, 1, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 1999-01-01T00:00:01Z
System.out.println(dateTime2); // 1999-01-01T00:00Z
System.out.println(dateTime1.compareTo(dateTime2)); // 1
final var dateTime1 = ZonedDateTime.of(2021, 4, 13, 0, 0, 0, 123, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 13, 0, 0, 0, 456, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-13T00:00:00.000000123Z
System.out.println(dateTime2); // 2021-04-13T00:00:00.000000456Z
System.out.println(dateTime1.compareTo(dateTime2)); // -333

Chronology getChronology ()

この日付/時間の暦を取得します。

final var dateTime = ZonedDateTime.of(2021, 5, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-05-01T00:00Z

System.out.println(dateTime.getChronology()); // ISO

boolean isAfter (ChronoZonedDateTime<?> other)

この日付/時間のインスタントが、指定された日付/時間のインスタントより後であるかどうかをチェックします。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

final var dateTime2 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime3 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime4 = ZonedDateTime.of(2001, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime2); // 1999-01-01T00:00Z
System.out.println(dateTime3); // 2000-01-01T00:00Z
System.out.println(dateTime4); // 2001-01-01T00:00Z

System.out.println(dateTime.isAfter(dateTime2)); // true
System.out.println(dateTime.isAfter(dateTime3)); // false
System.out.println(dateTime.isAfter(dateTime4)); // false
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:00Z

final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 13, 0, 0, 0, ZoneOffset.UTC);
final var dateTime3 = ZonedDateTime.of(2000, 1, 1, 13, 0, 1, 0, ZoneOffset.UTC);
final var dateTime4 = ZonedDateTime.of(2000, 1, 1, 12, 59, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime2); // 2000-01-01T13:00Z
System.out.println(dateTime3); // 2000-01-01T13:00:01Z
System.out.println(dateTime4); // 2000-01-01T12:59Z

System.out.println(dateTime.isAfter(dateTime2)); // false
System.out.println(dateTime.isAfter(dateTime3)); // false
System.out.println(dateTime.isAfter(dateTime4)); // true
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime1.isAfter(dateTime2)); // true
System.out.println(dateTime2.isAfter(dateTime1)); // false

boolean isBefore (ChronoZonedDateTime<?> other)

この日付/時間のインスタントが、指定された日付/時間のインスタントより前であるかどうかをチェックします。

final var dateTime = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T00:00Z

final var dateTime2 = ZonedDateTime.of(1999, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime3 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime4 = ZonedDateTime.of(2001, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime2); // 1999-01-01T00:00Z
System.out.println(dateTime3); // 2000-01-01T00:00Z
System.out.println(dateTime4); // 2001-01-01T00:00Z

System.out.println(dateTime.isBefore(dateTime2)); // false
System.out.println(dateTime.isBefore(dateTime3)); // false
System.out.println(dateTime.isBefore(dateTime4)); // true
final var dateTime = ZonedDateTime.of(2000, 1, 1, 13, 0, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2000-01-01T13:00Z

final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 13, 0, 0, 0, ZoneOffset.UTC);
final var dateTime3 = ZonedDateTime.of(2000, 1, 1, 13, 0, 1, 0, ZoneOffset.UTC);
final var dateTime4 = ZonedDateTime.of(2000, 1, 1, 12, 59, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime2); // 2000-01-01T13:00Z
System.out.println(dateTime3); // 2000-01-01T13:00:01Z
System.out.println(dateTime4); // 2000-01-01T12:59Z

System.out.println(dateTime.isBefore(dateTime2)); // false
System.out.println(dateTime.isBefore(dateTime3)); // true
System.out.println(dateTime.isBefore(dateTime4)); // false
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00+09:00[Asia/Tokyo]

System.out.println(dateTime1.isBefore(dateTime2)); // false
System.out.println(dateTime2.isBefore(dateTime1)); // true

boolean isEqual (ChronoZonedDateTime<?> other)

この日付/時間のインスタントが、指定された日付/時間のインスタントと等しいかどうかをチェックします。

final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00Z
System.out.println(dateTime1.isEqual(dateTime2)); // true
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());

System.out.println(dateTime1); // 2000-01-01T00:00Z
System.out.println(dateTime2); // 2000-01-01T00:00+09:00[Asia/Tokyo]
System.out.println(dateTime1.isEqual(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(4));
final var dateTime2 = ZonedDateTime.of(2000, 1, 1, 0, 0, 0, 0, ZoneOffset.ofHours(1));

System.out.println(dateTime1); // 2000-01-01T00:00+04:00
System.out.println(dateTime2); // 2000-01-01T00:00+01:00
System.out.println(dateTime1.isEqual(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2021, 4, 14, 15, 20, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 15, 21, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-14T15:20Z
System.out.println(dateTime2); // 2021-04-14T15:21Z
System.out.println(dateTime1.isEqual(dateTime2)); // false
final var dateTime1 = ZonedDateTime.of(2021, 4, 15, 0, 0, 0, 0, ZoneOffset.UTC);
final var dateTime2 = ZonedDateTime.of(2021, 4, 14, 0, 0, 0, 0, ZoneOffset.UTC);

System.out.println(dateTime1); // 2021-04-15T00:00Z
System.out.println(dateTime2); // 2021-04-14T00:00Z
System.out.println(dateTime1.isEqual(dateTime2)); // false

long toEpochSecond ()

この日付/時間を、エポック(1970-01-01T00:00:00Z)からの秒数に変換します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T12:30Z

final long epochSecond = dateTime.toEpochSecond();
System.out.println(epochSecond); // 1617885000
System.out.println(Instant.ofEpochSecond(epochSecond)); // 2021-04-08T12:30:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T12:30+09:00[Asia/Tokyo]

final long epochSecond = dateTime.toEpochSecond();
System.out.println(epochSecond); // 1617852600
System.out.println(Instant.ofEpochSecond(epochSecond)); // 2021-04-08T03:30:00Z

Instant toInstant ()

この日付/時間をInstantに変換します。

final var dateTime = ZonedDateTime.of(2021, 4, 8, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(dateTime); // 2021-04-08T12:30+09:00[Asia/Tokyo]

final var instant = dateTime.toInstant();
System.out.println(instant); // 2021-04-08T03:30:00Z
final var dateTime = ZonedDateTime.of(2021, 4, 8, 12, 30, 0, 0, ZoneOffset.UTC);
System.out.println(dateTime); // 2021-04-08T12:30Z

final var instant = dateTime.toInstant();
System.out.println(instant); // 2021-04-08T12:30:00Z

関連記事

ページの先頭へ