Java8新特性-016-时间矫正器

日期的操纵

  • TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
  • TemporalAdjusters : 该类通过静态方法提供了大量的常用TemporalAdjuster 的实现。


    Java8新特性-016-时间矫正器_第1张图片
    微信公众号:JavaWeb架构师

测试代码

TestTimeAdjuster.java

package java8.adjuster;

import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjusters;

import org.junit.Test;

public class TestTimeAdjuster {
    
    /*
     * TemporalAdjuster: 时间校正器,这是个接口。
     * TemporalAdjusters:时间矫正器的一个工具类,提供了一些对TemporalAdjuster接口的具体实现类。
     * 
     * 使用步骤:
     *  1.调用LocalDateTime的with方法。
     *  2.在with方法中传入TemporalAdjuster
     */
    
    // 使用TemporalAdjusters工具类。
    @Test
    public void test1() {
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println("现在是:" + ldt1);
        
        LocalDateTime ldt2 = ldt1.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        System.out.println("下一个周日是:" + ldt2);
    }
    /*
     * 结果:
     * 现在是:2018-01-21T13:52:26.299
     * 下一个周日是:2018-01-28T13:52:26.299
     */
    
    // 自定义TemporalAdjuster
    @Test
    public void test2() {
        /*
         * TemporalAdjuster是一个函数式接口:
         *  Temporal adjustInto(Temporal temporal);
         *  其中参数是Temporal,使用LocalDateTime需要进行强转。
         *  返回值也是一个Temporal,它是LocalDateTime的父接口。
         */
        // 下周一的LocalDateTime
        LocalDateTime ldt1 = LocalDateTime.now();
        
        LocalDateTime ldt3 = ldt1.with((e) -> {
            // 强转
            LocalDateTime ldt2 = (LocalDateTime) e;
            DayOfWeek dayOfWeek = ldt2.getDayOfWeek();
            
            int compareTo = 0;
            if(dayOfWeek.equals(DayOfWeek.MONDAY)) {
                compareTo = 7;
            } else if(dayOfWeek.equals(DayOfWeek.TUESDAY)) {
                compareTo = 6;
            } else if(dayOfWeek.equals(DayOfWeek.WEDNESDAY)) {
                compareTo = 5;
            } else if(dayOfWeek.equals(DayOfWeek.THURSDAY)) {
                compareTo = 4;
            } else if(dayOfWeek.equals(DayOfWeek.FRIDAY)) {
                compareTo = 3;
            } else if(dayOfWeek.equals(DayOfWeek.SATURDAY)) {
                compareTo = 2;
            } else if(dayOfWeek.equals(DayOfWeek.SUNDAY)) {
                compareTo = 1;
            }
            
            return ldt2.plusDays(compareTo);
        });
        
        System.out.println("下个周一是:" + ldt3);
    }
    /*
     * 结果:
     *  下个周一是:2018-01-22T13:48:54.285
     */
}
微信公众号:JavaWeb架构师

其它

  • 源码下载
关注下方公众号,回复:Java8.code
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

你可能感兴趣的:(Java8新特性-016-时间矫正器)