• 乐字节-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技术干货。

  • 相关阅读:
    [总结] XPO (eXpress Persistent Objects) 学习总结一
    [总结]工作中常用的正则表达式,有了它事半功倍!
    用JS实现页面滚动位置保持的方法
    [总结]TLF论坛全功略,下载指南!
    Javascript里使用Dom操作Xml
    。NET构架相关资源
    [收藏]关于用Asp.Net论坛发帖软件的实现
    匹配Unicode字符的正则表达式(中文)
    [转贴]如何实现TreeView的双击事件?
    [转贴]客户端不装adobe reader,打开pdf文件的插件
  • 原文地址:https://www.cnblogs.com/lotbyte/p/10702783.html
Copyright © 2020-2023  润新知