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 可重复注解与类型注解
  • 相关阅读:
    mysql 函数 存储过程 事件(event) job 模板
    protobuf 无proto 解码 decode 语言 java python
    mitmproxy fiddler 抓包 填坑
    android adb 常用命令
    android机器人 模拟 踩坑过程
    RabbitMQ添加新用户并支持远程访问
    Windows下RabbitMQ安装及配置
    Java mybatis mysql 常用数据类型对应关系
    easyExcel 踩坑
    linux防火墙查看状态firewall、iptable
  • 原文地址:https://www.cnblogs.com/binarylei/p/8618985.html
Copyright © 2011-2022 走看看