Exemples Java 8 - TemporalAdjusters

Java 8 - Exemples de TemporalAdjusters

Dans Java 8, vous pouvez utiliser lesjava.time.temporal.TemporalAdjusters prédéfinis pour ajuster une date ou desTemporal

1. TemporalAdjusters

Exemple pour déplacer une date vers firstDayOfMonth, firstDayOfNextMonth, lundi prochain et etc.

TestDate.java

package com.example.time;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class TestDate {

    public static void main(String[] args) {

        LocalDate localDate = LocalDate.now();
        System.out.println("current date : " + localDate);

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

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

        LocalDate with2 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
        System.out.println("next monday : " + with2);

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

    }

}

Sortie

current date : 2016-11-15
firstDayOfMonth : 2016-11-01
lastDayOfMonth : 2016-11-30
next monday : 2016-11-21
firstDayOfNextMonth : 2016-12-01

Note
Veuillez vérifier ceofficial TemporalAdjusters JavaDoc pour la liste complète des TemporalAdjusters prédéfinis.

2. TemporalAdjuster personnalisé

Exemple d'implémentation deTemporalAdjuster pour déplacer une date à Noël suivant.

NextChristmas.java

package com.example.time;

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

public class NextChristmas implements TemporalAdjuster {

    @Override
    public Temporal adjustInto(Temporal temporal) {

        return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25);

    }
}

TestDate.java

package com.example.time;

import java.time.LocalDate;

public class TestDate {

    public static void main(String[] args) {

        LocalDate localDate = LocalDate.now();
        System.out.println("current date : " + localDate);

        localDate = localDate.with(new NextChristmas());
        System.out.println("Next Christmas : " + localDate);

    }

}

Sortie

current date : 2016-11-15
Next Christmas : 2016-12-25

Vous pouvez également utiliser l'expression lambda suivante:

    localDate = localDate.with(
        temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25)
    );