zoukankan      html  css  js  c++  java
  • 乐字节-Java8新特性之Date API

    上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API

    前言:

    Java 8通过发布新的Date-Time API来进一步加强对日期与时间的处理。 旧版的 Java 中,日期时间 API 存在诸多问题 :

    • 非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,

    • 设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。

    • 时区处理麻烦 − 日期类并不提供国际化,没有时区支持

    Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:

    • Local(本地) : 简化了日期时间的处理,没有时区的问题。

    • Zoned(时区) − 通过制定的时区处理日期时间。

    新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。

     

    1、LocalDateTime

    LocalDateTime ldt = LocalDateTime.now();
    // 获取系统当前时间
    System.out.println(ldt);
    LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000);
    // 构建LocalDateTime对象ldt
    System.out.println(ldt2);
    // 获取明年此时的时间
    LocalDateTime ldt3 = ldt.plusYears(1);
    System.out.println(ldt3);
    // 获取去年此刻时间
    LocalDateTime ldt4 = ldt.minusYears(1);
    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());
    // 获取纳秒
    System.out.println(ldt.getNano());
    

      

    2、时间戳

    时间戳:以Unix元年:1970年1月1日 00:00:00 至目前时间之间的毫秒值

    public static void testInstant(){
        // 时间戳 Instant
        Instant ins1 = Instant.now();
        // 默认获取UTC时间,协调世界时
        System.out.println(ins1);
        OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
        System.out.println(odt);
        System.out.println(ins1.toEpochMilli());
        Instant ins2 = Instant.ofEpochSecond(60);
        System.out.println(ins2);
    }
    

      

    3、日期时间间隔计算:Duration、Period

    public static void testDuration(String[] args) {
            Instant ins1 = Instant.now();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Instant ins2 = Instant.now();
            Duration dura = Duration.between(ins1, ins2);
            System.out.println(dura.toMillis());
            System.out.println("----------------------");
            LocalTime lt1 = LocalTime.now();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            LocalTime lt2 = LocalTime.now();
            Duration dura2 = Duration.between(lt1, lt2);
            System.out.println(dura2.toMillis());
        }
    ​
        public  static void testPeriod(){
            LocalDate ld1 = LocalDate.of(2015, 2, 2);
            LocalDate ld2 = LocalDate.now();
            Period period = Period.between(ld1, ld2);
            System.out.println(period);
            System.out.println("相差" + period.getYears() + "年"
                    + period.getMonths() + "月"
                    + period.getDays() + "天");
    ​
        }
    

      

    4、时间校正:TemporalAdjuster

    public  static  void testTemporalAdjuster(){
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);
        LocalDateTime ldt2 = ldt.withDayOfMonth(10);
        System.out.println(ldt2);
        LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        System.out.println(ldt3);
    }
    

      

    5、日期时间格式化

    public  static  void testDateFormate(){
            DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
            LocalDateTime ldt = LocalDateTime.now();
            String strDate = ldt.format(dtf);
            System.out.println(strDate);
            System.out.println("----------------------------");
            DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
            String strDate2 = dtf2.format(ldt);
            System.out.println(strDate2);
            System.out.println("-----------------------------");
            LocalDateTime newDate = ldt.parse(strDate2, dtf2);
            System.out.println(newDate);
        }
    

      

    6、TimeZone 时区处理

       // 时区的处理
        public  static  void testTimeZone(){
            LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
            System.out.println(ldt);
            LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
            ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Europe/Dublin"));
            System.out.println(zdt);
        }
    

      

    这次就分享到这里了,后面小乐会继续给大家介绍Java8新特性的,请大家继续多多关注哦!乐字节只讲Java技术干货。

  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/lotbyte/p/10702783.html
Copyright © 2011-2022 走看看