Java : LocalDate (日付・タイムゾーンなし) - API使用例

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


概要

クラス構成

LocalDate は日付 () を表すクラスです。
タイムゾーン情報は持ちません。

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

final var date = LocalDate.of(2021, 12, 16);
System.out.println(date); // 2021-12-16

System.out.println(date.getYear()); // 2021
System.out.println(date.getMonth()); // DECEMBER
System.out.println(date.getDayOfMonth()); // 16

フィールド

static final LocalDate EPOCH

エポック年LocalDate、'1970-01-01'。

System.out.println(LocalDate.EPOCH); // 1970-01-01

static final LocalDate MAX

サポートされている最大のLocalDateである「+999999999-12-31」。

System.out.println(LocalDate.MAX); // +999999999-12-31
System.out.println(LocalDate.MAX.getYear()); // 999999999
System.out.println(LocalDate.MAX.getMonthValue()); // 12
System.out.println(LocalDate.MAX.getDayOfMonth()); // 31

static final LocalDate MIN

サポートされている最小のLocalDateである「-999999999-01-01」。

System.out.println(LocalDate.MIN); // -999999999-01-01
System.out.println(LocalDate.MIN.getYear()); // -999999999
System.out.println(LocalDate.MIN.getMonthValue()); // 1
System.out.println(LocalDate.MIN.getDayOfMonth()); // 1

メソッド

Temporal adjustInto (Temporal temporal)

指定された一時オブジェクトをこのオブジェクトと同じ日付になるように調整します。

final var temporal = LocalDateTime.of(2021, 4, 7, 12, 30);
System.out.println(temporal); // 2021-04-07T12:30

final var date = LocalDate.of(1999, 1, 1);
System.out.println(date); // 1999-01-01

final var result = date.adjustInto(temporal);
System.out.println(result); // 1999-01-01T12:30
final var temporal = ZonedDateTime.of(2021, 4, 7, 12, 30, 0, 0, ZoneId.systemDefault());
System.out.println(temporal); // 2021-04-07T12:30+09:00[Asia/Tokyo]

final var date = LocalDate.of(3000, 1, 1);
System.out.println(date); // 3000-01-01

final var result = date.adjustInto(temporal);
System.out.println(result); // 3000-01-01T12:30+09:00[Asia/Tokyo]

LocalDateTime atStartOfDay ()

この日付を深夜零時と組み合せて、この日付の開始時のLocalDateTimeを作成します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07
System.out.println(date.atStartOfDay()); // 2021-04-07T00:00
System.out.println(date.atStartOfDay(ZoneId.systemDefault())); // 2021-04-07T00:00+09:00[Asia/Tokyo]
final var date = LocalDate.of(1999, 1, 1);
System.out.println(date); // 1999-01-01
System.out.println(date.atStartOfDay()); // 1999-01-01T00:00
System.out.println(date.atStartOfDay(ZoneOffset.UTC)); // 1999-01-01T00:00Z
final var date = LocalDate.of(2000, 12, 10);
System.out.println(date); // 2000-12-10
System.out.println(date.atStartOfDay()); // 2000-12-10T00:00
System.out.println(date.atStartOfDay(ZoneOffset.ofHours(-9))); // 2000-12-10T00:00-09:00

ZonedDateTime atStartOfDay (ZoneId zone)

タイムゾーンのルールに従って、この日付のもっとも早い有効な時間からゾーン付きの日付/時間を返します。

このメソッドの使用例は、atStartOfDay() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

LocalDateTime atTime (int hour, int minute)

この日付を時間と組み合せてLocalDateTimeを作成します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

System.out.println(date.atTime(12, 30)); // 2021-04-07T12:30
System.out.println(date.atTime(12, 30, 45)); // 2021-04-07T12:30:45
System.out.println(date.atTime(12, 30, 45, 123456789)); // 2021-04-07T12:30:45.123456789

LocalDateTime atTime (int hour, int minute, int second)

この日付を時間と組み合せてLocalDateTimeを作成します。

このメソッドの使用例は、atTime(int hour, int minute) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

LocalDateTime atTime (int hour, int minute, int second, int nanoOfSecond)

この日付を時間と組み合せてLocalDateTimeを作成します。

このメソッドの使用例は、atTime(int hour, int minute) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

LocalDateTime atTime (LocalTime time)

この日付を時間と組み合せてLocalDateTimeを作成します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

{
    final var time = LocalTime.of(12, 30);
    System.out.println(time); // 12:30
    System.out.println(date.atTime(time)); // 2021-04-07T12:30
}
{
    final var time = LocalTime.of(12, 30, 45);
    System.out.println(time); // 12:30:45
    System.out.println(date.atTime(time)); // 2021-04-07T12:30:45
}
{
    final var time = LocalTime.of(12, 30, 45, 123456789);
    System.out.println(time); // 12:30:45.123456789
    System.out.println(date.atTime(time)); // 2021-04-07T12:30:45.123456789
}

OffsetDateTime atTime (OffsetTime time)

この日付をオフセット時間と組み合せてOffsetDateTimeを作成します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

{
    final var offset = OffsetTime.of(LocalTime.of(0, 0), ZoneOffset.UTC);
    System.out.println(offset); // 00:00Z
    System.out.println(date.atTime(offset)); // 2021-04-07T00:00Z
}
{
    final var offset = OffsetTime.of(LocalTime.of(0, 0), ZoneOffset.ofHours(9));
    System.out.println(offset); // 00:00+09:00
    System.out.println(date.atTime(offset)); // 2021-04-07T00:00+09:00
}
{
    final var offset = OffsetTime.of(LocalTime.of(12, 55), ZoneOffset.ofHoursMinutes(-2, -30));
    System.out.println(offset); // 12:55-02:30
    System.out.println(date.atTime(offset)); // 2021-04-07T12:55-02:30
}

int compareTo (ChronoLocalDate other)

この日付を別の日付と比較します。

final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 2);
System.out.println(date2); // 2021-01-02

System.out.println(date1.compareTo(date2)); // -1
final var date1 = LocalDate.of(2021, 2, 1);
System.out.println(date1); // 2021-02-01

final var date2 = LocalDate.of(2021, 1, 31);
System.out.println(date2); // 2021-01-31

System.out.println(date1.compareTo(date2)); // 1
final var date1 = LocalDate.of(1999, 12, 31);
System.out.println(date1); // 1999-12-31

final var date2 = LocalDate.of(2000, 1, 1);
System.out.println(date2); // 2000-01-01

System.out.println(date1.compareTo(date2)); // -1
final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 1);
System.out.println(date2); // 2021-01-01

System.out.println(date1.compareTo(date2)); // 0

Stream<LocalDate> datesUntil (LocalDate endExclusive)

順序付けられた日付のストリームを返します。

final var date = LocalDate.of(2021, 1, 25);
System.out.println(date); // 2021-01-25

final var endDate = LocalDate.of(2021, 2, 5);
System.out.println(endDate); // 2021-02-05

//2021-01-25
//2021-01-26
//2021-01-27
//2021-01-28
//2021-01-29
//2021-01-30
//2021-01-31
//2021-02-01
//2021-02-02
//2021-02-03
//2021-02-04
date.datesUntil(endDate).forEach(System.out::println);

Stream<LocalDate> datesUntil (LocalDate endExclusive, Period step)

指定された増分ステップで日付の連続した順序付けされたストリームを返します。

// 2日毎
final var date = LocalDate.of(2021, 1, 20);
System.out.println(date); // 2021-01-20

final var endDate = LocalDate.of(2021, 2, 5);
System.out.println(endDate); // 2021-02-05

//2021-01-20
//2021-01-22
//2021-01-24
//2021-01-26
//2021-01-28
//2021-01-30
//2021-02-01
//2021-02-03
date.datesUntil(endDate, Period.ofDays(2)).forEach(System.out::println);
// 1月毎
final var date = LocalDate.of(2021, 9, 20);
System.out.println(date); // 2021-09-20

final var endDate = LocalDate.of(2022, 2, 20);
System.out.println(endDate); // 2022-02-20

//2021-09-20
//2021-10-20
//2021-11-20
//2021-12-20
//2022-01-20
date.datesUntil(endDate, Period.ofMonths(1)).forEach(System.out::println);
// 4年毎
final var date = LocalDate.of(1999, 9, 20);
System.out.println(date); // 1999-09-20

final var endDate = LocalDate.of(2030, 9, 20);
System.out.println(endDate); // 2030-09-20

//1999-09-20
//2003-09-20
//2007-09-20
//2011-09-20
//2015-09-20
//2019-09-20
//2023-09-20
//2027-09-20
date.datesUntil(endDate, Period.ofYears(4)).forEach(System.out::println);

boolean equals (Object obj)

この日付がもう一方の日付と等しいかどうかを確認します。

final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 1);
System.out.println(date2); // 2021-01-01

System.out.println(date1.equals(date2)); // true
final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 2);
System.out.println(date2); // 2021-01-02

System.out.println(date1.equals(date2)); // false
final var date1 = LocalDate.of(-2000, 1, 1);
System.out.println(date1); // -2000-01-01

final var date2 = LocalDate.of(2000, 1, 1);
System.out.println(date2); // 2000-01-01

System.out.println(date1.equals(date2)); // false

String format (DateTimeFormatter formatter)

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

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

{
    final var ret1 = date.format(DateTimeFormatter.ISO_DATE);
    System.out.println(ret1); // 2021-04-07

    final var ret2 = date.format(DateTimeFormatter.BASIC_ISO_DATE);
    System.out.println(ret2); // 20210407

    final var ret3 = date.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日(E)"));
    System.out.println(ret3); // 2021年04月07日(水)
}
{
    System.out.println(Locale.getDefault()); // ja_JP

    final var ret1 = date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
    System.out.println(ret1); // 2021年4月7日水曜日

    final var ret2 = date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
    System.out.println(ret2); // 2021年4月7日

    final var ret3 = date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
    System.out.println(ret3); // 2021/04/07

    final var ret4 = date.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));
    System.out.println(ret4); // 2021/04/07
}

static LocalDate from (TemporalAccessor temporal)

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

final var temporal = LocalDateTime.of(2021, 1, 3, 12, 30, 55);
System.out.println(temporal); // 2021-01-03T12:30:55
System.out.println(LocalDate.from(temporal)); // 2021-01-03
final var temporal = ZonedDateTime.of(2021, 2, 4, 0, 0, 0, 0, ZoneId.systemDefault());
System.out.println(temporal); // 2021-02-04T00:00+09:00[Asia/Tokyo]
System.out.println(LocalDate.from(temporal)); // 2021-02-04
final var temporal = OffsetDateTime.of(1999, 12, 1, 22, 30, 55, 1234, ZoneOffset.ofHours(12));
System.out.println(temporal); // 1999-12-01T22:30:55.000001234+12:00
System.out.println(LocalDate.from(temporal)); // 1999-12-01

int get (TemporalField field)

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

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

final var date = LocalDate.of(2021, 4, 7);

System.out.println(date.get(ChronoField.YEAR)); // 2021
System.out.println(date.get(ChronoField.MONTH_OF_YEAR)); // 4
System.out.println(date.get(ChronoField.DAY_OF_MONTH)); // 7

//date.get(ChronoField.HOUR_OF_DAY); // UnsupportedTemporalTypeException

IsoChronology getChronology ()

ISO暦体系であるこの日付の暦を取得します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

final var chronology = date.getChronology();
System.out.println(chronology); // ISO

int getDayOfMonth ()

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

final var date = LocalDate.of(2021, 1, 1);
System.out.println(date); // 2021-01-01
System.out.println(date.getDayOfMonth()); // 1
final var date = LocalDate.of(2021, 1, 2);
System.out.println(date); // 2021-01-02
System.out.println(date.getDayOfMonth()); // 2
final var date = LocalDate.of(2021, 1, 15);
System.out.println(date); // 2021-01-15
System.out.println(date.getDayOfMonth()); // 15
final var date = LocalDate.of(2021, 1, 30);
System.out.println(date); // 2021-01-30
System.out.println(date.getDayOfMonth()); // 30
final var date = LocalDate.of(2021, 1, 31);
System.out.println(date); // 2021-01-31
System.out.println(date.getDayOfMonth()); // 31
final var date = LocalDate.of(2021, 2, 1);
System.out.println(date); // 2021-02-01
System.out.println(date.getDayOfMonth()); // 1

DayOfWeek getDayOfWeek ()

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

final var date = LocalDate.of(2021, 1, 3);
System.out.println(date); // 2021-01-03
System.out.println(date.getDayOfWeek()); // SUNDAY
final var date = LocalDate.of(2021, 1, 4);
System.out.println(date); // 2021-01-04
System.out.println(date.getDayOfWeek()); // MONDAY
final var date = LocalDate.of(2021, 1, 5);
System.out.println(date); // 2021-01-05
System.out.println(date.getDayOfWeek()); // TUESDAY
final var date = LocalDate.of(2021, 1, 6);
System.out.println(date); // 2021-01-06
System.out.println(date.getDayOfWeek()); // WEDNESDAY
final var date = LocalDate.of(2021, 1, 7);
System.out.println(date); // 2021-01-07
System.out.println(date.getDayOfWeek()); // THURSDAY
final var date = LocalDate.of(2021, 1, 8);
System.out.println(date); // 2021-01-08
System.out.println(date.getDayOfWeek()); // FRIDAY
final var date = LocalDate.of(2021, 1, 9);
System.out.println(date); // 2021-01-09
System.out.println(date.getDayOfWeek()); // SATURDAY
final var date = LocalDate.of(2021, 1, 10);
System.out.println(date); // 2021-01-10
System.out.println(date.getDayOfWeek()); // SUNDAY

int getDayOfYear ()

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

final var date = LocalDate.of(2021, 1, 1);
System.out.println(date); // 2021-01-01
System.out.println(date.getDayOfYear()); // 1
final var date = LocalDate.of(2021, 1, 2);
System.out.println(date); // 2021-01-02
System.out.println(date.getDayOfYear()); // 2
final var date = LocalDate.of(2021, 1, 30);
System.out.println(date); // 2021-01-30
System.out.println(date.getDayOfYear()); // 30
final var date = LocalDate.of(2021, 1, 31);
System.out.println(date); // 2021-01-31
System.out.println(date.getDayOfYear()); // 31
final var date = LocalDate.of(2021, 2, 1);
System.out.println(date); // 2021-02-01
System.out.println(date.getDayOfYear()); // 32
final var date = LocalDate.of(2021, 2, 2);
System.out.println(date); // 2021-02-02
System.out.println(date.getDayOfYear()); // 33
final var date = LocalDate.of(2021, 12, 31);
System.out.println(date); // 2021-12-31
System.out.println(date.getDayOfYear()); // 365
final var date = LocalDate.of(2022, 1, 1);
System.out.println(date); // 2022-01-01
System.out.println(date.getDayOfYear()); // 1

IsoEra getEra ()

この日付で使用可能な紀元を取得します。

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07
System.out.println(date.getEra()); // CE

long getLong (TemporalField field)

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

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

final var date = LocalDate.of(2021, 4, 7);

System.out.println(date.getLong(ChronoField.YEAR)); // 2021
System.out.println(date.getLong(ChronoField.MONTH_OF_YEAR)); // 4
System.out.println(date.getLong(ChronoField.DAY_OF_MONTH)); // 7

//date.getLong(ChronoField.HOUR_OF_DAY); // UnsupportedTemporalTypeException

Month getMonth ()

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

final var date = LocalDate.of(2021, 1, 15);
System.out.println(date); // 2021-01-15
System.out.println(date.getMonth()); // JANUARY
final var date = LocalDate.of(2021, 2, 15);
System.out.println(date); // 2021-02-15
System.out.println(date.getMonth()); // FEBRUARY
final var date = LocalDate.of(2021, 3, 15);
System.out.println(date); // 2021-03-15
System.out.println(date.getMonth()); // MARCH
final var date = LocalDate.of(2021, 12, 15);
System.out.println(date); // 2021-12-15
System.out.println(date.getMonth()); // DECEMBER
final var date = LocalDate.of(2022, 1, 1);
System.out.println(date); // 2022-01-01
System.out.println(date.getMonth()); // JANUARY

int getMonthValue ()

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

final var date = LocalDate.of(2021, 1, 15);
System.out.println(date); // 2021-01-15
System.out.println(date.getMonthValue()); // 1
final var date = LocalDate.of(2021, 2, 15);
System.out.println(date); // 2021-02-15
System.out.println(date.getMonthValue()); // 2
final var date = LocalDate.of(2021, 3, 15);
System.out.println(date); // 2021-03-15
System.out.println(date.getMonthValue()); // 3
final var date = LocalDate.of(2021, 12, 15);
System.out.println(date); // 2021-12-15
System.out.println(date.getMonthValue()); // 12
final var date = LocalDate.of(2022, 1, 1);
System.out.println(date); // 2022-01-01
System.out.println(date.getMonthValue()); // 1

int getYear ()

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

final var date = LocalDate.of(1999, 1, 1);
System.out.println(date); // 1999-01-01
System.out.println(date.getYear()); // 1999
final var date = LocalDate.of(2000, 1, 1);
System.out.println(date); // 2000-01-01
System.out.println(date.getYear()); // 2000
final var date = LocalDate.of(2021, 1, 1);
System.out.println(date); // 2021-01-01
System.out.println(date.getYear()); // 2021
final var date = LocalDate.of(9999, 1, 1);
System.out.println(date); // 9999-01-01
System.out.println(date.getYear()); // 9999

int hashCode ()

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

System.out.println(LocalDate.of(1970, 1, 1).hashCode()); // 4034625
System.out.println(LocalDate.of(1970, 1, 2).hashCode()); // 4034626
System.out.println(LocalDate.of(2021, 4, 8).hashCode()); // 4139272
System.out.println(LocalDate.of(9999, 1, 1).hashCode()); // 20469825

boolean isAfter (ChronoLocalDate other)

この日付が、指定された日付より後にあるかどうかをチェックします。

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

final var date2 = LocalDate.of(2021, 4, 7);
final var date3 = LocalDate.of(2021, 4, 8);
final var date4 = LocalDate.of(2021, 4, 9);

System.out.println(date2); // 2021-04-07
System.out.println(date3); // 2021-04-08
System.out.println(date4); // 2021-04-09

System.out.println(date.isAfter(date2)); // true
System.out.println(date.isAfter(date3)); // false
System.out.println(date.isAfter(date4)); // false
final var date = LocalDate.of(2000, 1, 1);
System.out.println(date); // 2000-01-01

final var date2 = LocalDate.of(1999, 12, 31);
final var date3 = LocalDate.of(3000, 1, 1);
final var date4 = LocalDate.of(-200, 1, 1);

System.out.println(date2); // 1999-12-31
System.out.println(date3); // 3000-01-01
System.out.println(date4); // -0200-01-01

System.out.println(date.isAfter(date2)); // true
System.out.println(date.isAfter(date3)); // false
System.out.println(date.isAfter(date4)); // true

boolean isBefore (ChronoLocalDate other)

この日付が、指定された日付より前にあるかどうかをチェックします。

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

final var date2 = LocalDate.of(2021, 4, 7);
final var date3 = LocalDate.of(2021, 4, 8);
final var date4 = LocalDate.of(2021, 4, 9);

System.out.println(date2); // 2021-04-07
System.out.println(date3); // 2021-04-08
System.out.println(date4); // 2021-04-09

System.out.println(date.isBefore(date2)); // false
System.out.println(date.isBefore(date3)); // false
System.out.println(date.isBefore(date4)); // true
final var date = LocalDate.of(2000, 1, 1);
System.out.println(date); // 2000-01-01

final var date2 = LocalDate.of(1999, 12, 31);
final var date3 = LocalDate.of(3000, 1, 1);
final var date4 = LocalDate.of(-200, 1, 1);

System.out.println(date2); // 1999-12-31
System.out.println(date3); // 3000-01-01
System.out.println(date4); // -0200-01-01

System.out.println(date.isBefore(date2)); // false
System.out.println(date.isBefore(date3)); // true
System.out.println(date.isBefore(date4)); // false

boolean isEqual (ChronoLocalDate other)

この日付が、指定された日付と等しいかどうかをチェックします。

final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 1);
System.out.println(date2); // 2021-01-01

System.out.println(date1.isEqual(date2)); // true
final var date1 = LocalDate.of(2021, 1, 1);
System.out.println(date1); // 2021-01-01

final var date2 = LocalDate.of(2021, 1, 2);
System.out.println(date2); // 2021-01-02

System.out.println(date1.isEqual(date2)); // false
final var date1 = LocalDate.of(2021, 2, 1);
System.out.println(date1); // 2021-02-01

final var date2 = LocalDate.of(2021, 1, 2);
System.out.println(date2); // 2021-01-02

System.out.println(date1.isEqual(date2)); // false

boolean isLeapYear ()

ISO先発暦体系のルールに従って、年がうるう年であるかどうかをチェックします。

final var date1 = LocalDate.of(2020, 2, 29);
System.out.println(date1); // 2020-02-29
System.out.println(date1.isLeapYear()); // ture

final var date2 = LocalDate.of(2020, 12, 31);
System.out.println(date2); // 2020-12-31
System.out.println(date2.isLeapYear()); // true

final var date3 = LocalDate.of(2021, 1, 1);
System.out.println(date3); // 2021-01-01
System.out.println(date3.isLeapYear()); // false

boolean isSupported (TemporalField field)

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

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

System.out.println(date.isSupported(ChronoField.YEAR)); // true
System.out.println(date.get(ChronoField.YEAR)); // 2021

System.out.println(date.isSupported(ChronoField.MONTH_OF_YEAR)); // true
System.out.println(date.get(ChronoField.MONTH_OF_YEAR)); // 4

System.out.println(date.isSupported(ChronoField.DAY_OF_MONTH)); // true
System.out.println(date.get(ChronoField.DAY_OF_MONTH)); // 7

System.out.println(date.isSupported(ChronoField.HOUR_OF_DAY)); // false
//date.get(ChronoField.HOUR_OF_DAY); // UnsupportedTemporalTypeException

boolean isSupported (TemporalUnit unit)

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

final var date = LocalDate.of(2021, 4, 7);
System.out.println(date); // 2021-04-07

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

System.out.println(date.isSupported(ChronoUnit.HOURS)); // false

int lengthOfMonth ()

この日付によって表される月の長さを返します。

final var date = LocalDate.of(2021, 1, 1);
System.out.println(date.lengthOfMonth()); // 31
final var date1 = LocalDate.of(2021, 2, 1);
System.out.println(date1.lengthOfMonth()); // 28

final var date2 = LocalDate.of(2020, 2, 1);
System.out.println(date2.lengthOfMonth()); // 29
final var date = LocalDate.of(2021, 4, 1);
System.out.println(date.lengthOfMonth()); // 30
final var date = LocalDate.of(2021, 12, 1);
System.out.println(date.lengthOfMonth()); // 31

int lengthOfYear ()

この日付によって表される年の長さを返します。

final var date = LocalDate.of(2019, 1, 1);
System.out.println(date.lengthOfYear()); // 365
System.out.println(date.isLeapYear()); // false
final var date = LocalDate.of(2020, 1, 1);
System.out.println(date.lengthOfYear()); // 366
System.out.println(date.isLeapYear()); // true
final var date = LocalDate.of(2021, 1, 1);
System.out.println(date.lengthOfYear()); // 365
System.out.println(date.isLeapYear()); // false

LocalDate minus (long amountToSubtract, TemporalUnit unit)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minus(1, ChronoUnit.DAYS)); // 2021-05-19
System.out.println(date.minus(2, ChronoUnit.MONTHS)); // 2021-03-20
System.out.println(date.minus(3, ChronoUnit.YEARS)); // 2018-05-20

LocalDate minus (TemporalAmount amountToSubtract)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minus(Period.ofDays(1))); // 2021-05-19
System.out.println(date.minus(Period.ofMonths(2))); // 2021-03-20
System.out.println(date.minus(Period.ofYears(3))); // 2018-05-20
System.out.println(date.minus(Period.of(1, 2, 3))); // 2020-03-17

LocalDate minusDays (long daysToSubtract)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minusDays(1)); // 2021-05-19
System.out.println(date.minusDays(2)); // 2021-05-18
System.out.println(date.minusDays(20)); // 2021-04-30
System.out.println(date.minusDays(365)); // 2020-05-20

LocalDate minusMonths (long monthsToSubtract)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minusMonths(1)); // 2021-04-20
System.out.println(date.minusMonths(2)); // 2021-03-20
System.out.println(date.minusMonths(12)); // 2020-05-20
final var date = LocalDate.of(2021, 3, 31);
System.out.println(date); // 2021-03-31
System.out.println(date.minusMonths(1)); // 2021-02-28

LocalDate minusWeeks (long weeksToSubtract)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minusWeeks(1)); // 2021-05-13
System.out.println(date.minusWeeks(2)); // 2021-05-06
System.out.println(date.minusWeeks(20)); // 2020-12-31
System.out.println(date.minusWeeks(100)); // 2019-06-20

LocalDate minusYears (long yearsToSubtract)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.minusYears(1)); // 2020-05-20
System.out.println(date.minusYears(2)); // 2019-05-20
System.out.println(date.minusYears(10)); // 2011-05-20
// うるう年
final var date = LocalDate.of(2020, 2, 29);
System.out.println(date); // 2020-02-29
System.out.println(date.minusYears(1)); // 2019-02-28

static LocalDate now ()

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

System.out.println(LocalDate.now()); // 2021-04-08

static LocalDate now (Clock clock)

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

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

System.out.println(LocalDate.now()); // 2021-04-08
System.out.println(LocalDate.now(clock)); // 2021-04-13

static LocalDate now (ZoneId zone)

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

System.out.println(ZonedDateTime.now()); // 2021-12-16T15:40:05.547042400+09:00[Asia/Tokyo]

System.out.println(LocalDate.now()); // 2021-12-16
System.out.println(LocalDate.now(ZoneOffset.ofHours(-18))); // 2021-12-15

static LocalDate of (int year, int month, int dayOfMonth)

年、月、および日からLocalDateのインスタンスを取得します。

System.out.println(LocalDate.of(2000, 2, 29)); // 2000-02-29
System.out.println(LocalDate.of(2021, 4, 8)); // 2021-04-08
System.out.println(LocalDate.of(LocalDate.MIN.getYear(), 1, 1)); // -999999999-01-01
System.out.println(LocalDate.of(LocalDate.MAX.getYear(), 12, 31)); // +999999999-12-31

static LocalDate of (int year, Month month, int dayOfMonth)

年、月、および日からLocalDateのインスタンスを取得します。

System.out.println(LocalDate.of(2000, Month.FEBRUARY, 29)); // 2000-02-29
System.out.println(LocalDate.of(2021, Month.APRIL, 8)); // 2021-04-08
System.out.println(LocalDate.of(LocalDate.MIN.getYear(), Month.JANUARY, 1)); // -999999999-01-01
System.out.println(LocalDate.of(LocalDate.MAX.getYear(), Month.DECEMBER, 31)); // +999999999-12-31

static LocalDate ofEpochDay (long epochDay)

エポック日数からLocalDateのインスタンスを取得します。

System.out.println(LocalDate.ofEpochDay(0)); // 1970-01-01
System.out.println(LocalDate.ofEpochDay(1)); // 1970-01-02
System.out.println(LocalDate.ofEpochDay(2)); // 1970-01-03
System.out.println(LocalDate.ofEpochDay(15000)); // 2011-01-26

static LocalDate ofInstant (Instant instant, ZoneId zone)

InstantとゾーンIDからLocalDateのインスタンスを取得します。

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

System.out.println(ZoneId.systemDefault()); // Asia/Tokyo
System.out.println(LocalDate.ofInstant(instant, ZoneId.systemDefault())); // 2021-04-08

System.out.println(LocalDate.ofInstant(instant, ZoneOffset.UTC)); // 2021-04-08
System.out.println(LocalDate.ofInstant(instant, ZoneOffset.ofHours(13))); // 2021-04-09
System.out.println(LocalDate.ofInstant(instant, ZoneOffset.ofHours(-13))); // 2021-04-07

static LocalDate ofYearDay (int year, int dayOfYear)

年および「年の日」からLocalDateのインスタンスを取得します。

System.out.println(LocalDate.ofYearDay(2021, 1)); // 2021-01-01
System.out.println(LocalDate.ofYearDay(2021, 2)); // 2021-01-02
System.out.println(LocalDate.ofYearDay(2021, 31)); // 2021-01-31
System.out.println(LocalDate.ofYearDay(2021, 32)); // 2021-02-01
System.out.println(LocalDate.ofYearDay(2021, 365)); // 2021-12-31

static LocalDate parse (CharSequence text)

2007-12-03などのテキスト文字列からLocalDateのインスタンスを取得します。

final var date = LocalDate.parse("2021-04-08");
System.out.println(date); // 2021-04-08

//LocalDate.parse("2021/04/03"); // DateTimeParseException
//LocalDate.parse("2021-4-3"); // DateTimeParseException

static LocalDate parse (CharSequence text, DateTimeFormatter formatter)

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

final var date = LocalDate.parse("2021-04-08", DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(date); // 2021-04-08
final var date = LocalDate.parse("2022/01/01", DateTimeFormatter.ofPattern("y/M/d"));
System.out.println(date); // 2022-01-01
final var date = LocalDate.parse("1999年2月3日", DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
System.out.println(date); // 1999-02-03

LocalDate plus (long amountToAdd, TemporalUnit unit)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plus(1, ChronoUnit.DAYS)); // 2021-05-21
System.out.println(date.plus(2, ChronoUnit.MONTHS)); // 2021-07-20
System.out.println(date.plus(3, ChronoUnit.YEARS)); // 2024-05-20

LocalDate plus (TemporalAmount amountToAdd)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plus(Period.ofDays(1))); // 2021-05-21
System.out.println(date.plus(Period.ofMonths(2))); // 2021-07-20
System.out.println(date.plus(Period.ofYears(3))); // 2024-05-20
System.out.println(date.plus(Period.of(1, 2, 3))); // 2022-07-23

LocalDate plusDays (long daysToAdd)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plusDays(1)); // 2021-05-21
System.out.println(date.plusDays(2)); // 2021-05-22
System.out.println(date.plusDays(20)); // 2021-06-09
System.out.println(date.plusDays(365)); // 2022-05-20

LocalDate plusMonths (long monthsToAdd)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plusMonths(1)); // 2021-06-20
System.out.println(date.plusMonths(2)); // 2021-07-20
System.out.println(date.plusMonths(12)); // 2022-05-20
final var date = LocalDate.of(2021, 3, 31);
System.out.println(date); // 2021-03-31
System.out.println(date.plusMonths(1)); // 2021-04-30

LocalDate plusWeeks (long weeksToAdd)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plusWeeks(1)); // 2021-05-27
System.out.println(date.plusWeeks(2)); // 2021-06-03
System.out.println(date.plusWeeks(20)); // 2021-10-07
System.out.println(date.plusWeeks(100)); // 2023-04-20

LocalDate plusYears (long yearsToAdd)

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

final var date = LocalDate.of(2021, 5, 20);
System.out.println(date); // 2021-05-20

System.out.println(date.plusYears(1)); // 2022-05-20
System.out.println(date.plusYears(2)); // 2023-05-20
System.out.println(date.plusYears(10)); // 2031-05-20
// うるう年
final var date = LocalDate.of(2020, 2, 29);
System.out.println(date); // 2020-02-29
System.out.println(date.plusYears(1)); // 2021-02-28

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

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08
System.out.println(date.query(TemporalQueries.precision())); // Days

ValueRange range (TemporalField field)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08
System.out.println(date.range(ChronoField.YEAR)); // -999999999 - 999999999
System.out.println(date.range(ChronoField.MONTH_OF_YEAR)); // 1 - 12
System.out.println(date.range(ChronoField.DAY_OF_MONTH)); // 1 - 30
final var date1 = LocalDate.of(1999, 2, 1);
System.out.println(date1); // 1999-02-01
System.out.println(date1.range(ChronoField.DAY_OF_MONTH)); // 1 - 28

// うるう年
final var date2 = LocalDate.of(2000, 2, 1);
System.out.println(date2); // 2000-02-01
System.out.println(date2.range(ChronoField.DAY_OF_MONTH)); // 1 - 29

long toEpochSecond (LocalTime time, ZoneOffset offset)

このLocalDateを1970-01-01T00:00:00Zの時代からの秒数に変換します。

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

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

final long epochSecond1 = date.toEpochSecond(time, ZoneOffset.UTC);
System.out.println(epochSecond1); // 1617885000
System.out.println(Instant.ofEpochSecond(epochSecond1)); // 2021-04-08T12:30:00Z

final long epochSecond2 = date.toEpochSecond(time, ZoneOffset.ofHours(8));
System.out.println(epochSecond2); // 1617856200
System.out.println(Instant.ofEpochSecond(epochSecond2)); // 2021-04-08T04:30:00Z

String toString ()

この日付をStringとして出力します(2007-12-03など)。

final var ret1 = LocalDate.of(2021, 4, 8).toString();
System.out.println(ret1); // 2021-04-08

final var ret2 = LocalDate.MAX.toString();
System.out.println(ret2); // +999999999-12-31

final var ret3 = LocalDate.MIN.toString();
System.out.println(ret3); // -999999999-01-01

Period until (ChronoLocalDate endDateExclusive)

この日付からもう一方の日付までの期間をPeriodとして計算します。

final var date1 = LocalDate.of(2010, 1, 15);
final var date2 = LocalDate.of(2011, 3, 18);

final var period1 = date1.until(date2);
System.out.println(period1.getYears()); // 1
System.out.println(period1.getMonths()); // 2
System.out.println(period1.getDays()); // 3

final var period2 = date2.until(date1);
System.out.println(period2.getYears()); // -1
System.out.println(period2.getMonths()); // -2
System.out.println(period2.getDays()); // -3
final var date1 = LocalDate.of(2021, 2, 2);
final var date2 = LocalDate.of(2021, 3, 1);

final var period = date1.until(date2);
System.out.println(period.getYears()); // 0
System.out.println(period.getMonths()); // 0
System.out.println(period.getDays()); // 27
final var date1 = LocalDate.of(2021, 2, 1);
final var date2 = LocalDate.of(2021, 3, 1);

final var period = date1.until(date2);
System.out.println(period.getYears()); // 0
System.out.println(period.getMonths()); // 1
System.out.println(period.getDays()); // 0

long until (Temporal endExclusive, TemporalUnit unit)

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

final var date1 = LocalDate.of(2010, 1, 15);
final var date2 = LocalDate.of(2011, 3, 18);

System.out.println(date1.until(date2, ChronoUnit.YEARS)); // 1
System.out.println(date1.until(date2, ChronoUnit.MONTHS)); // 14
System.out.println(date1.until(date2, ChronoUnit.DAYS)); // 427
final var date1 = LocalDate.of(2012, 6, 15);
final var date2 = LocalDate.of(2012, 8, 14);

System.out.println(date1.until(date2, ChronoUnit.YEARS)); // 0
System.out.println(date1.until(date2, ChronoUnit.MONTHS)); // 1
System.out.println(date1.until(date2, ChronoUnit.DAYS)); // 60

LocalDate with (TemporalAdjuster adjuster)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.with(TemporalAdjusters.firstDayOfMonth())); // 2021-04-01
System.out.println(date.with(TemporalAdjusters.lastDayOfMonth())); // 2021-04-30

System.out.println(date.with(Year.of(1999))); // 1999-04-08
System.out.println(date.with(Month.JANUARY)); // 2021-01-08

LocalDate with (TemporalField field, long newValue)

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

このAPIを使うより、withYearwithMonth といったAPIを代わりに使うことをおすすめします。

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.with(ChronoField.YEAR, 1999)); // 1999-04-08
System.out.println(date.with(ChronoField.MONTH_OF_YEAR, 12)); // 2021-12-08
System.out.println(date.with(ChronoField.DAY_OF_MONTH, 30)); // 2021-04-30

LocalDate withDayOfMonth (int dayOfMonth)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.withDayOfMonth(1)); // 2021-04-01
System.out.println(date.withDayOfMonth(2)); // 2021-04-02
System.out.println(date.withDayOfMonth(29)); // 2021-04-29
System.out.println(date.withDayOfMonth(30)); // 2021-04-30

LocalDate withDayOfYear (int dayOfYear)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.withDayOfYear(1)); // 2021-01-01
System.out.println(date.withDayOfYear(2)); // 2021-01-02
System.out.println(date.withDayOfYear(30)); // 2021-01-30
System.out.println(date.withDayOfYear(31)); // 2021-01-31
System.out.println(date.withDayOfYear(32)); // 2021-02-01
System.out.println(date.withDayOfYear(33)); // 2021-02-02

System.out.println(date.withDayOfYear(365)); // 2021-12-31

LocalDate withMonth (int month)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.withMonth(1)); // 2021-01-08
System.out.println(date.withMonth(2)); // 2021-02-08
System.out.println(date.withMonth(11)); // 2021-11-08
System.out.println(date.withMonth(12)); // 2021-12-08

LocalDate withYear (int year)

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

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08

System.out.println(date.withYear(1999)); // 1999-04-08
System.out.println(date.withYear(-999)); // -0999-04-08
System.out.println(date.withYear(2030)); // 2030-04-08

ChronoLocalDateで宣言されたメソッド

long toEpochDay ()

この日付をエポック日に変換します。

final var date = LocalDate.of(2021, 4, 8);
System.out.println(date); // 2021-04-08
System.out.println(date.toEpochDay()); // 18725
final var date = LocalDate.of(1970, 1, 1);
System.out.println(date); // 1970-01-01
System.out.println(date.toEpochDay()); // 0
final var date = LocalDate.of(1970, 1, 2);
System.out.println(date); // 1970-01-02
System.out.println(date.toEpochDay()); // 1
final var date = LocalDate.of(1970, 2, 1);
System.out.println(date); // 1970-02-01
System.out.println(date.toEpochDay()); // 31

関連記事

ページの先頭へ