zoukankan      html  css  js  c++  java
  • Java 8 新日期时间 API

    Java 8 新日期时间 API

    1. LocalDate、LocalTime、LocalDateTime

    LocalDate、LocalTime、LocalDateTime 实例是不可变的对象,分别表示使用 ISO-8601 日历系统的日期、时间、日期时间。它们提供简单的日期或时间,并不包含当前的时间信息。与不包含与时区相关的信息。

    public void test1(){
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);
    
        LocalDateTime ld2 = LocalDateTime.of(2016, 11, 21, 10, 10, 10);
        System.out.println(ld2);
    
        LocalDateTime ldt3 = ld2.plusYears(20);
        System.out.println(ldt3);
    
        LocalDateTime ldt4 = ld2.minusMonths(2);
        System.out.println(ldt4);
    
        System.out.println(ldt.getYear());
        System.out.println(ldt.getMonthValue());
        System.out.println(ldt.getDayOfMonth());
        System.out.println(ldt.getHour());
        System.out.println(ldt.getMinute());
        System.out.println(ldt.getSecond());
    }
    

    2. Instant(时间戳)

    使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值。

    public void test2(){
        Instant ins = Instant.now();  //默认使用 UTC 时区
        System.out.println(ins);
        
        OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));
        System.out.println(odt);
        
        System.out.println(ins.getNano());
        
        Instant ins2 = Instant.ofEpochSecond(5);
        System.out.println(ins2);
    }
    

    3. Duration 和 Period

    • Duration : 用于计算两个时间间隔
    • Period : 用于计算两个日期间隔
    public void test3() throws InterruptedException {
        Instant ins1 = Instant.now();
        Thread.sleep(1000);
        Instant ins2 = Instant.now();
        System.out.println("所耗费时间为:" + Duration.between(ins1, ins2));
        
        System.out.println("----------------------------------");
        
        LocalDate ld1 = LocalDate.now();
        LocalDate ld2 = LocalDate.of(2011, 1, 1);
        
        Period pe = Period.between(ld2, ld1);
        System.out.println(pe.getYears());
        System.out.println(pe.getMonths());
        System.out.println(pe.getDays());
    }
    

    4. 时间校正器

    • TemporalAdjuster 时间校正器。有时我们可能需要获例如:将日期调整到 "下个周日" 等操作。

    • TemporalAdjusters 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。

    public void test4(){
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);
        
        LocalDateTime ldt2 = ldt.withDayOfMonth(10);
        System.out.println(ldt2);
        
        LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
        System.out.println(ldt3);
        
        //自定义:下一个工作日
        LocalDateTime ldt5 = ldt.with((l) -> {
            LocalDateTime ldt4 = (LocalDateTime) l;
            
            DayOfWeek dow = ldt4.getDayOfWeek();
            
            if(dow.equals(DayOfWeek.FRIDAY)) {
                return ldt4.plusDays(3);
            } else if(dow.equals(DayOfWeek.SATURDAY)) {
                return ldt4.plusDays(2);
            } else{
                return ldt4.plusDays(1);
            }
        });
        
        System.out.println(ldt5);
    }
    

    5. DateTimeFormatter(解析和格式化日期或时间)

    public void test5(){
        DateTimeFormatter dtf;
    
        //dtf = DateTimeFormatter.ISO_LOCAL_DATE;
        dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");
        
        LocalDateTime ldt = LocalDateTime.now();
        String strDate = ldt.format(dtf);
        
        System.out.println(strDate);
        
        LocalDateTime newLdt = ldt.parse(strDate, dtf);
        System.out.println(newLdt);
    }
    

    6. ZonedDate、ZonedTime、ZonedDateTime(带时区的时间或日期)

    Java 8 中加入了对时区的支持,带日时区的时间为分别为 ZonedDate、ZonedTime、ZonedDateTime 其中每个时区都对应着 ID,地区 ID 都为 "{区域/(城市}" 的格式,例如:Asia/Shanghai

    // 所有支持的时区
    public void test6(){
        Set<String> set = ZoneId.getAvailableZoneIds();
        set.forEach(System.out::println);
    }
    
    public void test7(){
        LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println(ldt);
        
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));
        System.out.println(zdt);
    }
    

    Java 8 新特性

    1. Java 8 Lambda 表达式
    2. Java 8 Stream API
    3. Java 8 Optional 类深度解析
    4. Java 8 新时间日期 API
    5. Java 8 接口中的默认方法与静态方法
    6. Java 8 可重复注解与类型注解
  • 相关阅读:
    Swift 网络请求数据与解析
    第三方-Swift2.0后Alamofire的使用方法
    java异常处理机制throws
    eclipse导入不到嵌套的项目
    java异常处理机制Exception
    在eclipse中查找指定文件
    mysql查询count
    【待解决】An internal error occurred during: "Launching baiduTest1". java.lang.NullPointerException
    TestNG升级
    eclipse安装TestNG插件
  • 原文地址:https://www.cnblogs.com/binarylei/p/8618985.html
Copyright © 2011-2022 走看看