codestory

Die Anleitung zu Java LocalDate

  1. LocalDate
  2. Static Factory methods
  3. format(DateTimeFormatter)
  4. isBefore(..), isAfter(..)
  5. lengthOfMonth(), lengthOfYear()
  6. getX() *
  7. get(TemporalField)
  8. getLong(TemporalField)
  9. plusX(..) *
  10. plus(TemporalAmount)
  11. plus(long, TemporalUnit)
  12. minusX(..) *
  13. minus(TemporalAmount)
  14. minus(long, TemporalUnit)
  15. withX(..) *
  16. with(TemporalAdjuster)
  17. with(TemporalField, long)
  18. range(TemporalField)
  19. query(TemporalQuery<R>)
  20. isLeapYear()
  21. isSupported(TemporalField)
  22. isSupported(TemporalUnit)

1. LocalDate

Die Klasse LocalDate repräsentiert das lokale Datum im ISO-Kalendersystem. Es enthält keine Zeit- und Zeitzoneninformationen. Ein LocalDate kann ein Geburtsdatum, ein offizieller Feiertag usw. sein. Es bezieht sich auf einen bestimmten Tag im Jahr.
  • Java 8 Date Time API Overview
Die Klasse LocalDate befindet sich im Paket java.time. Wie andere Klassen, die in Java 8 Date Time API eingeführt wurden, ist LocalDate unveränderlich, was bedeutet, dass alle Berechnungen auf LocalDate ein neues Objekt LocalDate erstellen, sodass es sicher in einer Umgebung multithreading verwendet werden kann.
public final class LocalDate
        implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable

2. Static Factory methods

Die Klasse LocalDate stellt keinen Konstruktor bereit, stellt jedoch statische Factorymethoden zum Erstellen eines neuen Objekts bereit.
static LocalDate now()
static LocalDate now​(Clock clock)
static LocalDate now​(ZoneId zone)
static LocalDate of​(int year, int month, int dayOfMonth)
static LocalDate of​(int year, Month month, int dayOfMonth)
static LocalDate ofEpochDay​(long epochDay)
static LocalDate ofInstant​(Instant instant, ZoneId zone)
static LocalDate ofYearDay​(int year, int dayOfYear)
static LocalDate parse​(CharSequence text)
static LocalDate parse​(CharSequence text, DateTimeFormatter formatter)
Erstellen Sie ein Objekt LocalDate, das das aktuelle Datum aus der Systemuhr und der Standardzeitzone darstellt (auf Ihrem Computer).
// Ex: Current date from the system clock in the default time-zone.
LocalDate localDate = LocalDate.now();
System.out.println("localDate.now(): " + localDate); // 2021-06-17
Erstellen Sie ein Objekt LocalDate, das das aktuelle Datum einer angegebenen Uhr darstellt:
Clock clock = Clock.systemDefaultZone();

LocalDate localDate = LocalDate.now(clock);
System.out.println("localDate.now(clock): " + localDate);
  • Die Anleitung zu Java Clock
Erstellen Sie ein Objekt LocalDate, das das aktuelle Datum aus einer angegebenen ZoneId darstellt:
// Default system time-zone.
ZoneId zoneIdDefault = ZoneId.systemDefault();
        
// Ho Chi Minh City, Vietnam. UTC+7
ZoneId zoneId = ZoneId.of("Asia/Ho_Chi_Minh");

LocalDate localDate = LocalDate.now(zoneId);
System.out.println("localDate: " + localDate); // 2021-06-17
Erstellen Sie ein Objekt LocalDate aus dem angegebenen year, month, dayOfMonth:
// Ex: LocalDate based on year, month, dayOfMonth.
LocalDate localDate1 = LocalDate.of(2000, 5, 20); // 2000-05-20
System.out.println("localDate1: " + localDate1);

LocalDate localDate2 = LocalDate.of(2000, Month.MAY, 20); // 2000-05-20
System.out.println("localDate2: " + localDate2);
Erstellen Sie ein Objekt LocalDate aus dem angegebenen year, dayOfYear:
// Ex: LocalDate based on year and dayOfYear
LocalDate localDate1 = LocalDate.ofYearDay(1995, 1); // 1995-01-01 + 0 days.
System.out.println("localDate1: " + localDate1); // 1995-01-01

LocalDate localDate2 = LocalDate.ofYearDay(1995, 51); // 1995-01-01 + 50 days.
System.out.println("localDate2: " + localDate2); // 1995-02-20
Erstellen Sie ein Objekt LocalDate aus dem angegebenen epochDay:
// Ex: LocalDate based on epochDay.
LocalDate localDate1 = LocalDate.ofEpochDay(0); // 1971-01-01 + 0 days.
System.out.println("localDate1: " + localDate1); // 1970-01-01

LocalDate localDate2 = LocalDate.ofEpochDay(1000); // 1971-01-01 + 1000 days.
System.out.println("localDate2: " + localDate2); // 1972-09-27
Erstellen Sie ein Objekt LocalDate aus Objekten Instant und ZoneId:
Instant instant = Instant.now();
ZoneId zoneId = ZoneId.systemDefault();

// LocalDate based on Instant and ZoneId.
LocalDate localDate = LocalDate.ofInstant(instant, zoneId);
System.out.println("localDate: " + localDate);
Erstellen Sie ein Objekt LocalDate, indem Sie einen datumsformatierten Text analysieren:
// Ex: LocalDate based on CharSequence.
LocalDate localDate1 = LocalDate.parse("2011-11-20");
System.out.println("localDate1: " + localDate1); // 2011-11-20

// Ex: LocalDate based on CharSequence and DateTimeFormatter
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("dd/MM/yyyy");

LocalDate localDate2 = LocalDate.parse("20/11/2020", fmt2);
System.out.println("localDate2: " + localDate2); // 2011-11-20
  • Java Date Time Format Pattern

3. format(DateTimeFormatter)

Formatieren Sie dieses Objekt LocalDate mit einem angegebenen Objekt DateTimeFormatter.
// Inherited from ChronoLocalDate interface
public String format(DateTimeFormatter formatter)
Zum Beispiel:
LocalDate_format_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

DateTimeFormatter fmt1 = DateTimeFormatter.BASIC_ISO_DATE; // yyyyMMdd  
System.out.println("BASIC_ISO_DATE: " + localDate.format(fmt1)); // 20200515

DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("dd/MM/yyyy");  
System.out.println("dd/MM/yyyy: " + localDate.format(fmt2)); // 15/05/2020
  • Die Anleitung zu Java DateTimeFormatter
  • Java Date Time Format Pattern

4. isBefore(..), isAfter(..)

Die Methode isBefore(ChronoLocalDate) wird verwendet, um zu überprüfen, ob sich dieses Objekt LocalDate vor einem anderen angegebenen Objekt auf der Zeitachse befindet
// Inherited from ChronoLocalDate interface
public boolean isBefore(ChronoLocalDate other)
Die Methode isAfter(ChronoLocalDate) wird verwendet, um zu überprüfen, ob dieses Objekt LocalDate nach einem anderen angegebenen Objekt auf der Zeitachse liegt.
// Inherited from ChronoLocalDate interface
public boolean isAfter(ChronoLocalDate other)
localDate1 is before localDate2.
LocalDate localDate1 = LocalDate.parse("1990-05-15"); // 1990-May-15
LocalDate localDate2 = LocalDate.parse("2020-12-15"); // 2020-Dec-15


System.out.println("localDate1: " + localDate1); // 1990-05-15
System.out.println("localDate2: " + localDate2); // 2020-12-15
System.out.println();

System.out.println("localDate1.isBefore(localDate2): " + localDate1.isBefore(localDate2)); // true
System.out.println("localDate1.isAfter(localDate2): " + localDate1.isAfter(localDate2)); // false
Output:
localDate1: 1990-05-15
localDate2: 2020-12-15

localDate1.isBefore(localDate2): true
localDate1.isAfter(localDate2): false
  • Die Anleitung zu Java ChronoLocalDate

5. lengthOfMonth(), lengthOfYear()

Die Methode lengthOfMonth() is also die Anzahl der Tage im Monat zurück, sterben durch dieses Objekt darg LocalDate dargestellt werden
Die Methode lengthOfYear() gibt die Anzahl der Tage im Jahr zurück, die von diesem Objekt LocalDate dargestellt werden.
public int lengthOfMonth()  

public int lengthOfYear()
Zum Beispiel:
LocalDate_lengthX_ex1.java
package org.o7planning.localdate.ex;

import java.time.LocalDate;

public class LocalDate_lengthX_ex1 {

    public static void main(String[] args) {
        LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
        System.out.println("localDate: " + localDate); // 2020-05-15
        System.out.println();
        
        System.out.println("localDate.lengthOfMonth(): " + localDate.lengthOfMonth());  // 31 days
        System.out.println("localDate.lengthOfYear(): " + localDate.lengthOfYear()); // 366 days
    }
}

6. getX() *

Die Methode getYear() gibt das Jahr zurück, das durch dieses LocalDate repräsentiert wird. Dies entspricht dem Aufrufen der Methode get(ChronoField.YEAR). Wenn Sie das Jahr der Ära abrufen möchten, rufen Sie get(ChronoField.YEAR_OF_ERA) auf.
public int getYear()  
public int getMonthValue()   
public Month getMonth()
public int getDayOfMonth()
public int getDayOfYear()
public DayOfWeek getDayOfWeek()  
public IsoEra getEra()  
public IsoChronology getChronology()
Die anderen Methoden getMonthValue(), getMonth(), getDayOfMonth(), getDayOfYear(), getDayOfWeek(),... werden auch als ihr Name verstanden.
Method
Same As
getYear()
localDate.get(ChronoField.YEAR)
getMonthValue()
localDate.get(ChronoField.MONTH_OF_YEAR)
getMonth()
Month.of(localDate.get(ChronoField.MONTH_OF_YEAR))
getDayOfMonth()
localDate.get(ChronoField.DAY_OF_MONTH)
getDayOfYear()
localDate.get(ChronoField.DAY_OF_YEAR)
getDayOfWeek()
DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))
getEra()
localDate.get(ChronoField.ERA)
getChronology()
localDate.get(ChronoField.CHRONOLOGY)
Zum Beispiel:
LocalDate_getX_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

System.out.println("localDate.getEra(): " + localDate.getEra());  // IsoEra.CE  (enum)
System.out.println("localDate.getDayOfYear(): " + localDate.getDayOfYear()); // 136
System.out.println("localDate.getDayOfMonth(): " + localDate.getDayOfMonth()); // 15
System.out.println("localDate.getYear(): " + localDate.getYear());  // 2020
System.out.println("localDate.getMonth(): " + localDate.getMonth());  // Month.MAY (enum)
System.out.println("localDate.getMonthValue(): " + localDate.getMonthValue()); // 5
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek()); // DayOfWeek.FRIDAY (enum)
Output:
localDate: 2020-05-15

localDate.getEra(): CE
localDate.getDayOfYear(): 136
localDate.getDayOfMonth(): 15
localDate.getYear(): 2020
localDate.getMonth(): MAY
localDate.getMonthValue(): 5
localDate.getDayOfWeek(): FRIDAY

7. get(TemporalField)

Gibt den Wert des angegebenen Felds dieses Objekts LocalDate als 32-Bit-Integer zurück.
// Inherited from TemporalAccessor interface
public int get(TemporalField field)
Hinweis: Einige Felder werden möglicherweise nicht von LocalDate unterstützt und eine UnsupportedTemporalTypeException wird ausgelöst. Verwenden Sie zur Sicherheit die Methode isSupported(TemporalField), um zu überprüfen, ob ein bestimmtes Feld von LocalDate unterstützt wird.
Zum Beispiel:
LocalDate_get_field_ex1.java
LocalDate date = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + date); // 2020-05-15
System.out.println();

// int get(TemporalField field)
System.out.println("DAY_OF_MONTH: " + date.get(ChronoField.DAY_OF_MONTH)); // 15
System.out.println("DAY_OF_WEEK: " + date.get(ChronoField.DAY_OF_WEEK)); // 5
System.out.println("DAY_OF_YEAR: " + date.get(ChronoField.DAY_OF_YEAR)); // 136
System.out.println("ERA: " + date.get(ChronoField.ERA)); // 1
System.out.println("YEAR: " + date.get(ChronoField.YEAR)); // 2020
System.out.println("YEAR_OF_ERA: " + date.get(ChronoField.YEAR_OF_ERA)); // 2020
System.out.println("ALIGNED_DAY_OF_WEEK_IN_MONTH: " + date.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)); // 1
System.out.println("ALIGNED_DAY_OF_WEEK_IN_YEAR: " + date.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)); // 3
System.out.println("ALIGNED_WEEK_OF_MONTH: " + date.get(ChronoField.ALIGNED_WEEK_OF_MONTH)); // 3
System.out.println("ALIGNED_WEEK_OF_YEAR: " + date.get(ChronoField.ALIGNED_WEEK_OF_YEAR)); // 20

// Use getLong() instead
// System.out.println("PROLEPTIC_MONTH: " + date.get(ChronoField.PROLEPTIC_MONTH)); // 24244
// System.out.println("EPOCH_DAY: " + date.get(ChronoField.EPOCH_DAY)); // 18397
  • ChronoField
  • TemporalField

8. getLong(TemporalField)

Gibt den Wert des angegebenen Felds dieses Objekts LocalDate als 64-Bit-Integer zurück.
// Inherited from TemporalAccessor interface
public long getLong(TemporalField field)
Hinweis: Einige Felder werden möglicherweise nicht von LocalDate unterstützt und eine UnsupportedTemporalTypeException wird ausgelöst. Verwenden Sie zur Sicherheit die Methode isSupported(TemporalField), um zu überprüfen, ob ein bestimmtes Feld von LocalDate unterstützt wird.
Zum Beispiel:
LocalDate_getLong_field_ex1.java
LocalDate date = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + date); // 2020-05-15
System.out.println();

// long getLong(TemporalField field)
System.out.println("DAY_OF_MONTH: " + date.getLong(ChronoField.DAY_OF_MONTH)); // 15
System.out.println("DAY_OF_WEEK: " + date.getLong(ChronoField.DAY_OF_WEEK)); // 5
System.out.println("DAY_OF_YEAR: " + date.getLong(ChronoField.DAY_OF_YEAR)); // 136
System.out.println("ERA: " + date.getLong(ChronoField.ERA)); // 1
System.out.println("YEAR: " + date.getLong(ChronoField.YEAR)); // 2020
System.out.println("YEAR_OF_ERA: " + date.getLong(ChronoField.YEAR_OF_ERA)); // 2020
System.out.println("ALIGNED_DAY_OF_WEEK_IN_MONTH: " + date.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)); // 1
System.out.println("ALIGNED_DAY_OF_WEEK_IN_YEAR: " + date.getLong(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR)); // 3
System.out.println("ALIGNED_WEEK_OF_MONTH: " + date.getLong(ChronoField.ALIGNED_WEEK_OF_MONTH)); // 3
System.out.println("ALIGNED_WEEK_OF_YEAR: " + date.getLong(ChronoField.ALIGNED_WEEK_OF_YEAR)); // 20

System.out.println("PROLEPTIC_MONTH: " + date.getLong(ChronoField.PROLEPTIC_MONTH)); // 24244
System.out.println("EPOCH_DAY: " + date.getLong(ChronoField.EPOCH_DAY)); // 18397
  • TemporalField
  • ChronoField

9. plusX(..) *

Die Methode plusYear(yearsToAdd) gibt eine Kopie dieses Objekts LocalDate mit der angegebenen Anzahl von hinzugefügten Jahren zurück.
Die Methoden plusMonths(monthsToAdd), plusWeeks(weeksToAdd), plusDays(daysToAdd) werden auch als Namen verstanden
public LocalDate plusYears(long yearsToAdd)  
public LocalDate plusMonths(long monthsToAdd)  
public LocalDate plusWeeks(long weeksToAdd)
public LocalDate plusDays(long daysToAdd)
Zum Beispiel:
LocalDate_plusX_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// plusDays(long daysToAdd)
LocalDate localDate1 = localDate.plusDays(10);
System.out.println("localDate1: " + localDate1); // 2020-05-25

LocalDate localDate2 = localDate.plusDays(-15);
System.out.println("localDate2: " + localDate2); // 2020-04-30

// plusMonths(long monthsToAdd)
LocalDate localDate3 = localDate.plusMonths(3);
System.out.println("localDate3: " + localDate3); // 2020-08-15

// plusYears(long yearsToAdd)
LocalDate localDate4 = localDate.plusYears(1);
System.out.println("localDate4: " + localDate4); // 2021-05-15

// plusWeeks(long weeksToAdd)
LocalDate localDate5 = localDate.plusWeeks(2);
System.out.println("localDate5: " + localDate5); // 2020-05-29
Output:
localDate: 2020-05-15

localDate1: 2020-05-25
localDate2: 2020-04-30
localDate3: 2020-08-15
localDate4: 2021-05-15
localDate5: 2020-05-29

10. plus(TemporalAmount)

Gibt eine Kopie dieses Objekts LocalDate mit einer zusätzlichen Zeit zurück.
// Inherited from Temporal interface
public LocalDate plus(TemporalAmount amountToAdd)
Zum Beispiel:
LocalDate_plus_amount_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// plus(TemporalAmount amountToAdd)
TemporalAmount amount1 = Period.ofDays(5);
LocalDate localDate1 = localDate.plus(amount1);
System.out.println("localDate1: " + localDate1); // 2020-05-20

// plus(TemporalAmount amountToAdd)
LocalDate from = LocalDate.of(2020, 5, 10);
LocalDate to = LocalDate.of(2020, 5, 12);

TemporalAmount amount2 = Period.between(from, to); // 2 days
LocalDate localDate2 = localDate.plus(amount2);
System.out.println("localDate2: " + localDate2
Output:
localDate: 2020-05-15

localDate1: 2020-05-20
localDate2: 2020-05-17

11. plus(long, TemporalUnit)

Gibt eine Kopie dieses Objekts LocalDate mit einem angegebenen Wert zurück, der in der angegebenen Einheit hinzugefügt wurde.
// Inherited from Temporal interface
public LocalDate plus(long amountToAdd, TemporalUnit unit)
Zum Beispiel:
LocalDate_plus_unit_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// plus(long amountToAdd, TemporalUnit unit)
LocalDate localDate1 = localDate.plus(5, ChronoUnit.DAYS);
System.out.println("localDate1: " + localDate1); // 2020-05-20

// plus(long amountToAdd, TemporalUnit unit)
LocalDate localDate2 = localDate.plus(10, ChronoUnit.MONTHS);
System.out.println("localDate2: " + localDate2); // 2021-03-15
Output:
localDate: 2020-05-15

localDate1: 2020-05-20
localDate2: 2021-03-15

12. minusX(..) *

Die Methode minusYears(yearsToSubtract) gibt eine Kopie dieses Objekts LocalDate mit der angegebenen Anzahl von Jahren subtrahiert zurück.
Als Namen werden auch die Methoden minusMonths(monthsToSubtract), minusWeeks(weeksToSubtract), minusDays(daysToSubtract) verstanden.
public LocalDate minusYears(long yearsToSubtract)  
public LocalDate minusMonths(long monthsToSubtract)  
public LocalDate minusWeeks(long weeksToSubtract)  
public LocalDate minusDays(long daysToSubtract)
Zum Beispiel:
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// minusDays(long daysToSubtract)
LocalDate localDate1 = localDate.minusDays(10);
System.out.println("localDate1: " + localDate1); // 2020-05-05

LocalDate localDate2 = localDate.minusDays(-10);
System.out.println("localDate2: " + localDate2); // 2020-05-25

// minusMonths(long monthsToSubtract)
LocalDate localDate3 = localDate.minusMonths(3);
System.out.println("localDate3: " + localDate3); // 2020-02-15

// minusYears(long yearsToSubtract)
LocalDate localDate4 = localDate.minusYears(1);
System.out.println("localDate4: " + localDate4); // 2019-05-15

// minusWeeks(long weeksToSubtract)
LocalDate localDate5 = localDate.minusWeeks(2);
System.out.println("localDate5: " + localDate5); // 2020-05-01

// minus(TemporalAmount)
TemporalAmount amount6 = Period.ofDays(5);
LocalDate localDate6 = localDate.minus(amount6);
System.out.println("localDate6: " + localDate6); // 2020-05-10

// minus(TemporalAmount)
LocalDate from = LocalDate.of(2020, 5, 10);
LocalDate to = LocalDate.of(2020, 5, 12);

TemporalAmount amount7 = Period.between(from, to); // 2 days
LocalDate localDate7 = localDate.minus(amount7);
System.out.println("localDate7: " + localDate7); // 2020-05-13

// minus(long amountToSubtract, TemporalUnit unit)
TemporalUnit unit = ChronoUnit.DAYS;
LocalDate localDate8 = localDate.minus(3, unit);

System.out.println("localDate8: " + localDate8); // 2020-05-12
Output:
localDate: 2020-05-15

localDate1: 2020-05-05
localDate2: 2020-05-25
localDate3: 2020-02-15
localDate4: 2019-05-15
localDate5: 2020-05-01
localDate6: 2020-05-10
localDate7: 2020-05-13
localDate8: 2020-05-12

13. minus(TemporalAmount)

Gibt eine Kopie dieses Objekts LocalDate mit abgezogener Zeit zurück.
// Inherited from Temporal interface.
public LocalDate minus(TemporalAmount amountToSubtract)
Zum Beispiel:
LocalDate_minus_amount_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// minus(TemporalAmount amountToSubtract)
TemporalAmount amount1 = Period.ofDays(5);
LocalDate localDate1 = localDate.minus(amount1);
System.out.println("localDate1: " + localDate1); // 2020-05-10

// minus(TemporalAmount amountToSubtract)
LocalDate from = LocalDate.of(2020, 5, 10);
LocalDate to = LocalDate.of(2020, 5, 12);

TemporalAmount amount2 = Period.between(from, to); // 2 days
LocalDate localDate2 = localDate.minus(amount2);
System.out.println("localDate2: " + localDate2); // 2020-05-13

14. minus(long, TemporalUnit)

Gibt eine Kopie dieses Objekts LocalDate mit einem angegebenen Wert zurück, der in einer bestimmten Einheit abgezogen wird.
// Inherited from Temporal interface.
public LocalDate minus(long amountToSubtract, TemporalUnit unit)
Zum Beispiel:
LocalDate_minus_unit_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15
System.out.println("localDate: " + localDate); // 2020-05-15
System.out.println();

// minus(long amountToSubtract, TemporalUnit unit)
LocalDate localDate1 = localDate.minus(5, ChronoUnit.DAYS);
System.out.println("localDate1: " + localDate1); // 2020-05-10

// minus(long amountToSubtract, TemporalUnit unit)
LocalDate localDate2 = localDate.minus(10, ChronoUnit.MONTHS);
System.out.println("localDate2: " + localDate2); // 2019-07-15

15. withX(..) *

No ADS
public LocalDate withYear(int year)  

public LocalDate withMonth(int month)  

public LocalDate withDayOfMonth(int dayOfMonth)

public LocalDate withDayOfYear(int dayOfYear)
Die Methode withYear(year) gibt eine Kopie dieses Objekts LocalDate mit geändertem Jahr zurück. Wenn der Tag des Monats nicht für das Jahr gültig ist, wird er auf den letzten gültigen Tag des Monats geändert.
LocalDate_withYear_ex1.java
LocalDate localDate1 = LocalDate.parse("2020-02-29").withYear(2024);  
System.out.println("localDate1: " + localDate1); // 2024-02-29

LocalDate localDate2 = LocalDate.parse("2020-02-29").withYear(2019); // Important Note!
System.out.println("localDate2: " + localDate2); // 2019-02-28

LocalDate localDate3 = LocalDate.parse("2020-02-28").withYear(2019);  
System.out.println("localDate3: " + localDate3); // 2019-02-28

LocalDate localDate4 = LocalDate.parse("2020-02-21").withYear(2019);  
System.out.println("localDate4: " + localDate4); // 2019-02-21
Die Methode withMonth(month) gibt eine Kopie dieses Objekts LocalDate mit geändertem Monat zurück. Wenn der Tag des Monats nicht für das Jahr gültig ist, wird er auf den letzten gültigen Tag des Monats geändert.
LocalDate_withMonth_ex1.java
LocalDate localDate1 = LocalDate.parse("2020-03-31").withMonth(2); // Important Note!
System.out.println("localDate1: " + localDate1); // 2020-02-29

LocalDate localDate2 = LocalDate.parse("2020-03-31").withMonth(2); // Important Note!
System.out.println("localDate2: " + localDate2); // 2020-02-29

LocalDate localDate3 = LocalDate.parse("2020-03-29").withMonth(2);  
System.out.println("localDate3: " + localDate3); // 2019-02-28

LocalDate localDate4 = LocalDate.parse("2020-03-21").withMonth(2);  
System.out.println("localDate4: " + localDate4); // 2020-02-21
Die Methode withDayOfMonth(dayOfMonth) gibt eine Kopie dieses Objekts LocalDate mit geändertem Tag des Monats zurück. Wenn der Tag des Monats ungültig ist, wird eine DateTimeException ausgelöst.
LocalDate_withDayOfMonth_ex1.java
LocalDate localDate1 = LocalDate.parse("2020-02-01").withDayOfMonth(15);  
System.out.println("localDate1: " + localDate1); // 2020-02-15

LocalDate localDate2 = LocalDate.parse("2020-02-01").withDayOfMonth(29);  
System.out.println("localDate2: " + localDate2); // 2020-02-29

// Invalid date.
// Throws java.time.DateTimeException: Invalid date 'FEBRUARY 30'
LocalDate localDate3 = LocalDate.parse("2020-02-01").withDayOfMonth(30);  
System.out.println("localDate3: " + localDate3);
Output:
localDate1: 2020-02-15
localDate2: 2020-02-29
Exception in thread "main" java.time.DateTimeException: Invalid date 'FEBRUARY 30'
    at java.base/java.time.LocalDate.create(LocalDate.java:459)
    at java.base/java.time.LocalDate.of(LocalDate.java:271)
    at java.base/java.time.LocalDate.withDayOfMonth(LocalDate.java:1124)
    at org.o7planning.localdate.ex.LocalDate_withDayOfMonth_ex1.main(LocalDate_withDayOfMonth_ex1.java:17)
Die Methode withDayOfYear(dayOfYear) gibt eine Kopie dieses Objekts LocalDate mit geändertem Tag des Jahres zurück. Wenn dayOfYear nicht gültig ist, wird eine DateTimeException ausgelöst, gültige Werte von 1 bis 365 (oder 366).
LocalDate_withDayOfYear_ex1.java
LocalDate localDate1 = LocalDate.parse("2020-02-01").withDayOfYear(15);  
System.out.println("localDate1: " + localDate1); // 2020-01-15

LocalDate localDate2 = LocalDate.parse("2020-02-01").withDayOfYear(29);  
System.out.println("localDate2: " + localDate2); // 2020-01-29

LocalDate localDate3 = LocalDate.parse("2020-02-01").withDayOfYear(35);  
System.out.println("localDate3: " + localDate3); // 2020-02-04

16. with(TemporalAdjuster)

Gibt eine Kopie dieses Objekts LocalDate zurück, wobei die Datumsdaten vom Objekt TemporalAdjuster angepasst wurden.
// Inherited from Temporal interface
public LocalDate with(TemporalAdjuster adjuster)
Zum Beispiel:
LocalDate_with_adjuster_ex1.java
LocalDate now = LocalDate.now();
System.out.println("Now is: " + now);
System.out.println();

LocalDate firstDayOfMonth = now.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("firstDayOfMonth: " + firstDayOfMonth);

LocalDate nextMonday = now.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("nextMonday: " + nextMonday);

LocalDate firstDayOfNextYear = now.with(TemporalAdjusters.firstDayOfNextYear());
System.out.println("firstDayOfNextYear: " + firstDayOfNextYear);
Output:
Now is: 2021-06-01

firstDayOfMonth: 2021-06-01
nextMonday: 2021-06-07
firstDayOfNextYear: 2022-01-01
Beispiel: Schreiben Sie einen benutzerdefinierten TemporalAdjuster, um das nächste Weihnachtsdatum zu finden.
LocalDate_with_adjuster_ex2.java
package org.o7planning.localdate.ex;

import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoField;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;

public class LocalDate_with_adjuster_ex2 {

    public static void main(String[] args) {
        LocalDate localDate = LocalDate.parse("2020-12-28");
        System.out.println("Date : " + localDate);

        // with(TemporalAdjuster):
        LocalDate localDate2 = localDate.with(new NextChristmas());
        System.out.println("Next Christmas : " + localDate2);
    }
}

class NextChristmas implements TemporalAdjuster {

    @Override
    public Temporal adjustInto(Temporal temporal) {
        int month = temporal.get(ChronoField.MONTH_OF_YEAR);
        int day = temporal.get(ChronoField.DAY_OF_MONTH);
        if(month == 12 && day > 25)  {
            temporal = temporal.plus(Period.ofYears(1));
        }
        return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25);
    }
}
Output:
Date : 2020-12-28
Next Christmas : 2021-12-25

17. with(TemporalField, long)

No ADS
Gibt eine Kopie dieses Objekts LocalDate zurück, wobei das angegebene Feld auf den neuen Wert geändert wurde
// Inherited from Temporal interface
public LocalDate with(TemporalField field, long newValue)
In einigen Fällen kann das Ändern des angegebenen Felds dazu führen, dass das resultierende Datum ungültig wird, z. B. würde das Ändern des Monats vom 31. Januar auf Februar den Tag des Monats ungültig machen. In solchen Fällen wurde dieses Problem mit dieser Methode behandelt. Normalerweise wird das vorherige gültige Datum ausgewählt, das in diesem Beispiel der letzte gültige Tag im Februar ist.
Zum Beispiel:
LocalDate_with_field_ex1.java
LocalDate myDate = LocalDate.parse("2021-05-29");

System.out.println("myDate is: " + myDate);
System.out.println("myDate day of week: " + myDate.get(ChronoField.DAY_OF_WEEK));  // 6
System.out.println("myDate day of month: " + myDate.get(ChronoField.DAY_OF_MONTH)); // 29
System.out.println();

LocalDate localDate1 =    myDate.with(ChronoField.DAY_OF_WEEK, 3);   
System.out.println("localDate1: " + localDate1); // 2021-05-26

LocalDate localDate2 =    myDate.with(ChronoField.DAY_OF_MONTH, 10);  
System.out.println("localDate2: " + localDate2);  // 2021-05-10

// February 2021 has only 28 days.
LocalDate localDate3 =    myDate.with(ChronoField.MONTH_OF_YEAR, 2);  
System.out.println("localDate3: " + localDate3);  // 2021-02-28  (***)
Output:
myDate is: 2021-05-29
myDate day of week: 6
myDate day of month: 29

localDate1: 2021-05-26
localDate2: 2021-05-10
localDate3: 2021-02-28
  • ChronoField
  • TemporalField

18. range(TemporalField)

Gibt den Bereich gültiger Werte für das angegebene Feld zurück.
//  Inherited from TemporalAccessor interface
public ValueRange range(TemporalField field)
Zum Beispiel:
LocalDate_range_ex1.java
LocalDate localDate   = LocalDate.parse("2021-06-18");  
System.out.println("LocalDate: "  + localDate);
 
// range(TemporalField field)
ValueRange range = localDate.range(ChronoField.DAY_OF_MONTH);
 
// Print range of DAY_OF_MONTH
System.out.println("Range of DAY_OF_MONTH: "  + range); // 1 - 30

System.out.println("First day of this month: " + range.getMinimum()); // 1
System.out.println("Last day of this month: " + range.getMaximum()); // 30

ValueRange range2 = localDate.range(ChronoField.DAY_OF_YEAR);
System.out.println("Range of DAY_OF_YEAR: "  + range2); // 1 - 365
  • TemporalField
  • ChronoField

19. query(TemporalQuery<R>)

Fragen Sie dieses Objekt LocalDate mit dem angegebenen Parameter TemporalQuery ab, um Informationen zu extrahieren.
// Inherited from TemporalAccessor interface
public <R> R query(TemporalQuery<R> query)
Zum Beispiel:
LocalDate_query_ex1.java
package org.o7planning.localdate.ex;

import java.time.LocalDate;
import java.time.temporal.TemporalQueries;

public class LocalDate_query_ex1 {

    public static void main(String[] args) {
        LocalDate localDate = LocalDate.parse("2021-05-15");

        // Apply query method of LocalDate class
        String value = localDate.query(TemporalQueries.precision()).toString();

        // Print the result
        System.out.println("Precision value for LocalDate is " + value);

        // Apply query method of LocalDate class
        System.out.println("Zone value for LocalDate is " + localDate.query(TemporalQueries.offset()));
    }
}
Output:
Precision value for LocalDate is Days
Zone value for LocalDate is null

20. isLeapYear()

Überprüfen Sie, ob das in diesem Objekt LocalDate dargestellte Jahr ein Schaltjahr ist.
// Inherited from ChronoLocalDate interface
public boolean isLeapYear()
Grundsätzlich gilt im ISO-Kalendersystem ein Jahr als Schaltjahr, wenn es durch 4 teilbar ist. Ein durch 100 teilbares Jahr ist jedoch kein Schaltjahr, es sei denn, es ist durch 400 teilbar.
So:
  • 1904 ist ein Schaltjahr, weil es durch 4 teilbar und nicht durch 100 teilbar war..
  • 1900 ist kein Schaltjahr, weil es durch 100 teilbar ist, aber nicht durch 400.
  • 2000 ist ein Schaltjahr, weil es durch 400 teilbar ist.

21. isSupported(TemporalField)

No ADS
Überprüfen Sie, ob ein bestimmtes TemporalField unterstützt wird.
// Inherited from TemporalAccessor interface
public boolean isSupported(TemporalField field)
Grundsätzlich unterstützt LocalDate die folgenden TemporalField :
  • ChronoField.DAY_OF_WEEK
  • ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH
  • ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR
  • ChronoField.DAY_OF_MONTH
  • ChronoField.DAY_OF_YEAR
  • ChronoField.EPOCH_DAY
  • ChronoField.ALIGNED_WEEK_OF_MONTH
  • ChronoField.ALIGNED_WEEK_OF_YEAR
  • ChronoField.MONTH_OF_YEAR
  • ChronoField.PROLEPTIC_MONTH
  • ChronoField.YEAR_OF_ERA
  • ChronoField.YEAR
  • ChronoField.ERA
Zum Beispiel:
LocalDate_isSupported_ex1.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15

// boolean isSupported(TemporalField field)
// LocalDate does not support ChronoField.MINUTE_OF_DAY, HOUR_OF_DAY,.. (** Used for LocalDateTime, LocalTime)
System.out.println("MINUTE_OF_DAY is supported? " + localDate.isSupported(ChronoField.MINUTE_OF_DAY)); // false
System.out.println("HOUR_OF_DAY is supported? " + localDate.isSupported(ChronoField.HOUR_OF_DAY)); // false

// LocalDate support ChronoField.MONTH_OF_YEAR, DAY_OF_WEEK,..
System.out.println("MONTH_OF_YEAR is supported? " + localDate.isSupported(ChronoField.MONTH_OF_YEAR)); // true
System.out.println("DAY_OF_WEEK is supported? " + localDate.isSupported(ChronoField.DAY_OF_WEEK)); // true
  • TemporalField
  • ChronoField

22. isSupported(TemporalUnit)

Prüfen Sie, ob eine angegebene TemporalUnit unterstützt wird.
// Inherited from Temporal interface
public boolean isSupported(TemporalUnit unit)
Grundsätzlich unterstützt LocalDate die folgenden TemporalUnit:
  • ChronoUnit.DAYS
  • ChronoUnit.WEEKS
  • ChronoUnit.MONTHS
  • ChronoUnit.YEARS
  • ChronoUnit.DECADES
  • ChronoUnit.CENTURIES
  • ChronoUnit.MILLENNIA
  • ChronoUnit.ERAS
Zum Beispiel:
LocalDate_isSupported_ex2.java
LocalDate localDate = LocalDate.parse("2020-05-15"); // 2020-May-15

// boolean isSupported(TemporalUnit unit)
// LocalDate does not support ChronoUnit.HOURS, MINUTES,.. (** Used for LocalDateTime, LocalTime)
System.out.println("HOURS is supported? " + localDate.isSupported(ChronoUnit.HOURS)); // false
System.out.println("MINUTES is supported? " + localDate.isSupported(ChronoUnit.MINUTES)); // false

// LocalDate support ChronoUnit.CENTURIES, WEEKS,..
System.out.println("CENTURIES is supported? " + localDate.isSupported(ChronoUnit.CENTURIES)); // true
System.out.println("WEEKS is supported? " + localDate.isSupported(ChronoUnit.WEEKS)); // true
No ADS