Java 8 – TemporalAdjusters examples 修改教程

In Java 8, you can use the predefined java.time.temporal.TemporalAdjusters to adjust a date or Temporal

1. TemporalAdjusters

Example to move a date to firstDayOfMonth, firstDayOfNextMonth, next Monday and etc.

TestDate.java

package com.mkyong.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);

    }

}

Output

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

Note
Please check this official TemporalAdjusters JavaDoc for the entire list of the predefined TemporalAdjusters.

2. Custom TemporalAdjuster

Example to implement TemporalAdjuster to move a date to next Christmas.

NextChristmas.java

package com.mkyong.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.mkyong.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);

    }

}

Output

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

Alternatively, you can use the following lambda expression :

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

References

  1. Java 8 – HijrahDate, How to calculate the Ramadan date
  2. TemporalAdjuster JavaDoc
  3. TemporalAdjusters JavaDoc
  4. Temporal JavaDoc
  5. Wikipedia Christmas

如果觉得JSRUN的教程对您有用,请随意打赏。您的支持将鼓励JSRUN继续提供更好的服务

捐助JSRUN
JSRUN前端教程共编系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的本前端教程,让知识的积累变得统一完整、自成体系。 希望广大工程师能一起参与进共编,让零散在世界各处的知识点找到组织、找到家。
X
支付宝
9.99
请使用支付宝扫码支付, 有效时间 5分0秒
超过有效时间后请立即停止支付。
支付故障请联系QQ:565830900
因10.00元通道已占用,系统建议您支付9.99元
正在生成二维码, 此过程可能需要15秒钟
谢谢支持,我一定会更加努力的