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 可重复注解与类型注解
  • 相关阅读:
    Win10设置多时区时钟方法技巧
    Win10技巧:使用“照片”应用剪辑视频、添加特效
    kk录像机怎么剪辑视频 kk录像机视频剪辑教程
    360快剪辑怎么使用 360快剪辑软件使用方法介绍
    WPF HyperLink链接下划线隐藏
    ORACLE 如何产生一个随机数
    电脑的开始菜单点不了 用户帐户出现在桌面上
    无法加载DLL"***.dll":找不到指定的模块
    C#调用dll提示"试图加载格式不正确的程序"原因及解决方法
    C#中与C++中的 LPWSTR(wchar_t *) 对应的类型
  • 原文地址:https://www.cnblogs.com/binarylei/p/8618985.html
Copyright © 2011-2022 走看看