codestory

Die Anleitung zu Java TemporalAdjusters

  1. TemporalAdjusters
  2. TemporalAdjusters Methods
  3. ofDateAdjuster(UnaryOperator<LocalDate>)
  4. firstDayOfMonth()
  5. lastDayOfMonth()
  6. firstDayOfNextMonth()
  7. firstDayOfYear()
  8. lastDayOfYear()
  9. firstDayOfNextYear()
  10. firstInMonth(DayOfWeek)
  11. lastInMonth(DayOfWeek)
  12. dayOfWeekInMonth(int, DayOfWeek)
  13. next(DayOfWeek)
  14. nextOrSame(DayOfWeek)
  15. previous(DayOfWeek)
  16. previousOrSame(DayOfWeek)

1. TemporalAdjusters

Die Klasse TemporalAdjusters stellt statische Methoden bereit, um nützliche und allgemeine Objekte TemporalAdjuster abzurufen, wie zum Beispiel:
  • Den ersten oder letzten Tag des Monats finden.
  • Den ersten Tag des nächsten Monats finden.
  • Den ersten oder letzten Tag des Jahres finden.
  • Den ersten Tag des nächsten Jahres finden.
  • Den ersten oder letzten "Wochentags" ("day-of-week") innerhalb eines Monats finden, z. B. "erster Mittwoch im Juni".
  • Den nächsten oder vorherigen "Wochentags" finden, z. B. "nächster Donnerstag"
Siehe auch Artikel über die Interface TemporalAdjuster mit grundlegenden Beispielen und benutzerdefiniertem TemporalAdjuster:

2. TemporalAdjusters Methods

Alle von TemporalAdjusters bereitgestellten Methoden sind statisch und geben ein Objekt TemporalAdjuster zurück.
public static TemporalAdjuster ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster)

public static TemporalAdjuster firstDayOfMonth()  
public static TemporalAdjuster lastDayOfMonth()  

public static TemporalAdjuster firstDayOfNextMonth()  

public static TemporalAdjuster firstDayOfYear()  
public static TemporalAdjuster lastDayOfYear()  

public static TemporalAdjuster firstDayOfNextYear()

public static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek)  
public static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek)  

public static TemporalAdjuster dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)

public static TemporalAdjuster next(DayOfWeek dayOfWeek)   
public static TemporalAdjuster nextOrSame(DayOfWeek dayOfWeek)  

public static TemporalAdjuster previous(DayOfWeek dayOfWeek)   
public static TemporalAdjuster previousOrSame(DayOfWeek dayOfWeek)

3. ofDateAdjuster(UnaryOperator<LocalDate>)

Diese Methode gibt ein Objekt TemporalAdjuster zurück, um den Teil LocalDate eines Objekts Temporal anzupassen. Andere Teile des Objekts Temporal bleiben unverändert
public static TemporalAdjuster ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster) {
    Objects.requireNonNull(dateBasedAdjuster, "dateBasedAdjuster");
    return (temporal) -> {
        LocalDate input = LocalDate.from(temporal);
        LocalDate output = dateBasedAdjuster.apply(input);
        return temporal.with(output);
    };
}
Beispiel: Hinzufügen von 2 Tagen zu einem Objekt Temporal:
Temporal
Example
After 2 days
ZonedDateTime
2020-05-25T13:30:59+6[Asia/Bishkek]
2020-05-27T13:30:59+6[Asia/Bishkek]
OffsetDateTime
2020-05-25T13:30:59+6
2020-05-27T13:30:59+6
LocalDateTime
2020-05-25T13:30:59
2020-05-27T13:30:59
Beispiel: Ein TemporalAdjuster zum Hinzufügen von 2 Tagen.
TemporalAdjusters_ofDateAdjuster_ex1.java
package org.o7planning.temporaladjusters.ex;

import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;

public class TemporalAdjusters_ofDateAdjuster_ex1 {
    public static void main(String[] args) {
        TemporalAdjuster add2DaysAdjuster = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(2));
        
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        ZonedDateTime after2Days = zonedDateTime.with(add2DaysAdjuster);
        
        System.out.println("zonedDateTime: " + zonedDateTime);
        System.out.println("after2Days: " + after2Days);
    }
}
Output:
zonedDateTime: 2021-07-05T18:53:19.138987+06:00[Asia/Bishkek]
after2Days: 2021-07-07T18:53:19.138987+06:00[Asia/Bishkek]
  • Die Anleitung zu Java UnaryOperator

4. firstDayOfMonth()

Geben Sie einen TemporalAdjusterzurück - "erster Tag des Monats".
public static TemporalAdjuster firstDayOfMonth()
Zum Beispiel:
TemporalAdjusters_firstDayOfMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate firstDayOfMonth = (LocalDate) TemporalAdjusters.firstDayOfMonth().adjustInto(localDate);
System.out.println("firstDayOfMonth: " + firstDayOfMonth);

DayOfWeek dayOfWeek = firstDayOfMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
firstDayOfMonth: 2021-07-01
 > day of week: THURSDAY
  • Die Anleitung zu Java DayOfWeek

5. lastDayOfMonth()

Geben Sie einen TemporalAdjuster zurück - "letzter Tag des Monats".
public static TemporalAdjuster lastDayOfMonth()
Zum Beispiel:
TemporalAdjusters_lastDayOfMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate lastDayOfMonth = (LocalDate) TemporalAdjusters.lastDayOfMonth().adjustInto(localDate);
System.out.println("lastDayOfMonth: " + lastDayOfMonth);

DayOfWeek dayOfWeek = lastDayOfMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
lastDayOfMonth: 2021-07-31
 > day of week: SATURDAY
  • Die Anleitung zu Java DayOfWeek

6. firstDayOfNextMonth()

Geben Sie einen TemporalAdjuster zurück - "erster Tag des nächsten Monats".
public static TemporalAdjuster firstDayOfNextMonth()
Zum Beispiel:
TemporalAdjusters_firstDayOfNextMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate firstDayOfNextMonth = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("firstDayOfNextMonth: " + firstDayOfNextMonth);

DayOfWeek dayOfWeek = firstDayOfNextMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);

int dayOfMonth = firstDayOfNextMonth.getDayOfMonth();
System.out.println(" > day of month: " + dayOfMonth);
Output:
today is: 2021-07-05
firstDayOfNextMonth: 2021-08-01
 > day of week: SUNDAY
 > day of month: 1

7. firstDayOfYear()

Geben Sie einen TemporalAdjuster zurück - "erster Tag des Jahres".
public static TemporalAdjuster firstDayOfYear()
Zum Beispiel:
TemporalAdjusters_firstDayOfYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate firstDayOfYear = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println("firstDayOfYear: " + firstDayOfYear);

DayOfWeek dayOfWeek = firstDayOfYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
firstDayOfYear: 2021-01-01
 > day of week: FRIDAY

8. lastDayOfYear()

Geben Sie einen TemporalAdjuster zurück - "letzter Tag des Jahres".
public static TemporalAdjuster lastDayOfYear()
Zum Beispiel:
TemporalAdjusters_lastDayOfYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate lastDayOfYear = (LocalDate) localDate.with(TemporalAdjusters.lastDayOfYear());
System.out.println("lastDayOfYear: " + lastDayOfYear);

DayOfWeek dayOfWeek = lastDayOfYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
lastDayOfYear: 2021-12-31
 > day of week: FRIDAY

9. firstDayOfNextYear()

Geben Sie einen TemporalAdjuster zurück - "erster Tag des nächsten Jahres".
public static TemporalAdjuster firstDayOfNextYear()
Zum Beispiel:
TemporalAdjusters_firstDayOfNextYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);

LocalDate firstDayOfNextYear = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfNextYear());
System.out.println("firstDayOfNextYear: " + firstDayOfNextYear);

DayOfWeek dayOfWeek = firstDayOfNextYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);

int dayOfYear = firstDayOfNextYear.getDayOfYear();
System.out.println(" > day of year: " + dayOfYear);
Output:
today is: 2021-07-05
firstDayOfNextYear: 2022-01-01
> day of week: SATURDAY
> day of year: 1

10. firstInMonth(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "Erster Wochentag des Monats". Suchen Sie beispielsweise nach dem ersten MONTAG (MONDAY) des Monats.
public static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek)
Derzeit ist das Startdatum der DST in den USA der zweite Sonntag im März und das Ende der erste Sonntag im November. Die Frage ist, wann ist das Startdatum von DST 2025 in den USA?
TemporalAdjusters_firstInMonth_ex1.java
// Find the first SUNDAY in month.
TemporalAdjuster adjuster1 = TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY);
// Find the next SUNDAY
TemporalAdjuster adjuster2 = TemporalAdjusters.next(DayOfWeek.SUNDAY);

LocalDate localDate = LocalDate.of(2025, 3, 1); // 2025-03-01

LocalDate firstSundayInMonth = (LocalDate) localDate.with(adjuster1);
LocalDate secondSundayInMonth = (LocalDate) firstSundayInMonth.with(adjuster2);

System.out.println("firstSaturdayInMonth: " + firstSundayInMonth); // 2025-03-02
System.out.println("secondSundayInMonth: " + secondSundayInMonth);  // 2025-03-09

11. lastInMonth(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "Letzter Wochentag des Monats". Suchen Sie beispielsweise nach dem letzten MONTAG (MONDAY) des Monats.
public static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek)
Beispiel: Finden Sie den letzten Sonntag des aktuellen Monats:
TemporalAdjusters_lastInMonth_ex1.java
// Find the last SUNDAY in month.
TemporalAdjuster adjuster = TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY);  

LocalDate localDate = LocalDate.now();
System.out.println("Today is: " + localDate);

LocalDate lastSundayInMonth = (LocalDate) localDate.with(adjuster);  
System.out.println("lastSundayInMonth: " + lastSundayInMonth);
Output:
Today is: 2021-07-05
lastSundayInMonth: 2021-07-25

12. dayOfWeekInMonth(int, DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "der ordinal(te) Wochentag des Monats". Suchen Sie beispielsweise nach dem 3. MONTAG (MONDAY) des Monats.
public static TemporalAdjuster dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)
Beispiel: Finden Sie den zweiten SONNTAG (SUNDAY) im März 2025 (DST-Startdatum 2025 in den USA).
TemporalAdjusters_dayOfWeekInMonth_ex1.java
// Find the second SUNDAY in month.
TemporalAdjuster adjuster = TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY);  

LocalDate localDate = LocalDate.of(2025, 3, 1); // 2025-03-01
 
LocalDate secondSundayInMonth = (LocalDate) localDate.with(adjuster);   
System.out.println("secondSundayInMonth: " + secondSundayInMonth);  // 2025-03-09

13. next(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "nächster Wochentag". Suchen Sie beispielsweise nach dem nächsten MONTAG (MONDAY).
public static TemporalAdjuster next(DayOfWeek dayOfWeek)
Beispiel: Finden Sie den nächsten MONTAG (MONDAY).
TemporalAdjusters_next_ex1.java
// Find the next MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.next(DayOfWeek.MONDAY);  

LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate);  // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek());  // MONDAY
 
// Next MONDAY.
LocalDate nextMonday = localDate.with(adjuster);
 
System.out.println("nextMonday: " + nextMonday);  // 2021-07-12
System.out.println("nextMonday.getDayOfWeek(): " + nextMonday.getDayOfWeek());  // MONDAY
Output:
localDate: 2021-07-05
localDate.getDayOfWeek(): MONDAY
nextMonday: 2021-07-12
nextMonday.getDayOfWeek(): MONDAY

14. nextOrSame(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "gleicher oder nächster Wochentag".
public static TemporalAdjuster nextOrSame(DayOfWeek dayOfWeek)
Beispiel: Geben Sie dieses Datum zurück, wenn es Montag ist, andernfalls geben Sie den nächsten Montag zurück.
TemporalAdjusters_nextOrSame_ex1.java
// Find the next or same MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY);  

LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate);  // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek());  // MONDAY
 
// Next or same MONDAY.
LocalDate nextOrSameMonday = localDate.with(adjuster);
 
System.out.println("nextOrSameMonday: " + nextOrSameMonday);  // 2021-07-05
System.out.println("nextOrSameMonday.getDayOfWeek(): " + nextOrSameMonday.getDayOfWeek());  // MONDAY

15. previous(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "vorheriger Wochentag". Finden Sie beispielsweise den vorherigen MONTAG (MONDAY).
public static TemporalAdjuster previous(DayOfWeek dayOfWeek)
Beispiel: Finden Sie den vorherigen MONTAG (MONDAY).
TemporalAdjusters_previous_ex1.java
// Find the previous MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.previous(DayOfWeek.MONDAY);  

LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate);  // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek());  // MONDAY
 
// Previous MONDAY.
LocalDate previousMonday = localDate.with(adjuster);
 
System.out.println("previousMonday: " + previousMonday);  // 2021-06-28
System.out.println("previousMonday.getDayOfWeek(): " + previousMonday.getDayOfWeek());  // MONDAY
Output:
localDate: 2021-07-05
localDate.getDayOfWeek(): MONDAY
previousMonday: 2021-06-28
previousMonday.getDayOfWeek(): MONDAY

16. previousOrSame(DayOfWeek)

Geben Sie einen TemporalAdjuster zurück - "gleicher oder vorheriger Wochentag".
public static TemporalAdjuster previousOrSame(DayOfWeek dayOfWeek)
Beispiel: Gibt dieses Datum zurück, wenn es Montag ist, ansonsten den vorherigen Montag.
TemporalAdjusters_previousOrSame_ex1.java
// Find the previous or same MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY);  

LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate);  // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek());  // MONDAY
 
// Previous or same MONDAY.
LocalDate previousOrSameMonday = localDate.with(adjuster);
 
System.out.println("previousOrSameMonday: " + previousOrSameMonday);  // 2021-07-05
System.out.println("previousOrSameMonday.getDayOfWeek(): " + previousOrSameMonday.getDayOfWeek());  // MONDAY