Search code examples
datetimetimecalendarjava-8localdate

How to customize the TemporalAdjusters in Java 8?


I am working with Java 8 Date and Time utility. I am using the TemporalAdjuster interface and the implementations found in TemporalAdjusters to manipulate the calculations for a specific day or date.

My requirement is to calculate the day after 3 month and 2 days. For example, today is 6th of Decemeber (i.e 2016-12-06 in YYYY-MM-DD) and after 3 months and 2 days, the date would be 8th of March, 2017 (i.e. 2017-03-08 in YYYY-MM-DD).

I tried two ways of doing this using the Date and Time utility as follows:

//First
LocalDate dayAfter3MonthsAnd2Days = LocalDate
    .now()
    .with(firstDayOfNextMonth()).plusMonths(2).plusDays(2);

//Second
LocalDate dayAfter3MonthsAnd2Days = LocalDate
    .now()
    .with(firstDayOfMonth()).plusMonths(3).plusDays(2);

Both of them returns the date as 3rd of March, 2017 (i.e. 2017-03-03) as follows:

dayAfter3MonthsAnd2Days = 2017-03-03

Is there any way i can customize the TemporalAdjusters and get the desired output? Or any other alternate to achieve the goal?


Solution

  • I found out that i can simply use the following:

    LocalDate dayAfter3MonthsAnd2DaysNew = LocalDate
                                                .now()
                                                .plusMonths(3)
                                                .plusDays(2);
    

    Alongwith that, i can also use the custom TemporalAdjuster which uses the above same process to do manipulations as follows:

    TemporalAdjuster ta = TemporalAdjusters.ofDateAdjuster(
                                             (LocalDate d) -> d.plusMonths(3).plusDays(2));
    
    LocalDate dayAfter3MonthsAnd2DaysCustom = LocalDate
                                                    .now()
                                                    .with(ta);
    

    Although the previous way is simpler, but we can use more custom proceedings using ofDateAdjuster method of TemporalAdjuster.