Java8-time类

day01

java8 新的日期和时间API

  • java8之前的时间和日期

    1. 只能依赖java.util.Date类,这个类无法表达日期,只能以毫秒的精度表示时间

      Date date = new Date();
      System.out.println(date);
      //输出结果:Mon Jun 08 10:14:31 CST 2020
      
    2. Java1.1中的java.util.Calendar也存在类似的问题和缺陷。

    3. DateFormat方法也有一些自己的问题,比如线程不安全。

  • Java8-LoaclDate、LoaclTime、LocalDateTime

    1. LocalDate

      • LocalDate的实例是不可变对象,他只提供了简单的日期,并不包含当天的时间信息和时区信息。
      • 通过静态工厂of来创建实例。
      public static void main(String[] args) {
              LocalDate of = LocalDate.of(2020, 6, 8);
              System.out.println(of);
          }
      //输出结果:2020-06-08
      
      • 通过LocalDate.now()获得当前日期。
      public static void main(String[] args) {
              LocalDate now = LocalDate.now();
              System.out.println(now);
          }
      //输出结果:2020-06-08
      

      image-20200608102944514

      可在LocalDate中获取到单独的年份,月份,星期几等。也可通过get()方法传入ChronoField枚举来获取到这些元素。

    2. 与LocalDate类似,LoaclTime则是来获取并操作时间的。

      • LoaclTime也可使用of来创建实例
      public static void main(String[] args) {
              LocalTime now = LocalTime.of(10,36,55);
              System.out.println(now);
          }
      //输出结果:10:36:55
      
      • LocalTime.now()获取当前时间。
      public static void main(String[] args) {
              LocalTime now = LocalTime.now();
              System.out.println(now);
          }
      //输出结果:10:38:32.688
      

      image-20200608103939917

      也可以获取当前的时、分、秒。

    3. LocalDateTime是LocalDate二号LocalTime的合体,同时表示了时间和日期,但不带时区。

       public static void main(String[] args) {
           //这里也可以用重载分别传入date和time
              LocalDateTime of = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
              System.out.println(of);
          }
      
      • 可以使用toLocalTime/Date方法取到单独的时间和日期。
      LocalDateTime of = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
              LocalDate localDate = of.toLocalDate();
              LocalTime localTime = of.toLocalTime();
              System.out.println(localDate);
              System.out.println(localTime);
      //输出:2020-06-08
      //	   10:22:10
      
    4. 共有方法

      • parse():传入日期返回LocalDate实例
      //指定格式
      LocalDate parse = LocalDate.parse("20191307", DateTimeFormatter.BASIC_ISO_DATE);
      //不指定格式需在日期中自带格式
      LocalDate parse1 = LocalDate.parse("2007-12-03");
      
  • DateTimeFormatter-格式化日期-时间对象(线程安全)。

    • DateTimeFormatter预定义了像BASIC_ISO_DATE,ISO_DATE_TIME这样的实例,所有的DateTimeFormatter实例都能用于以一定格式来创建特定日期或时间的字符串。
    LocalDateTime date = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
            String format = date.format(DateTimeFormatter.BASIC_ISO_DATE);
            String format1 = date.format(DateTimeFormatter.ISO_DATE_TIME);
            System.out.println(format);
            System.out.println(format1);
    /*输出结果:
       	20200608
    	2020-06-08T10:22:10
    */
    
    • 也可以通过解析日期或时间字符串重新创建该日期对象。
    LocalDateTime dateTime = LocalDateTime.of(2020, 6, 8, 10, 22, 10);
            LocalDate parse = LocalDate.parse("20200608",DateTimeFormatter.BASIC_ISO_DATE);
            System.out.println(parse);
    //输出:2020-06-08
    
    • 可通过ofPattern()方法来自定义格式。
     DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd~MM~yy");
             LocalDate of = LocalDate.of(2020, 6, 8);
             String format = of.format(dateTimeFormatter);
             System.out.println(format);
     //输出:08~06~20
    
  • Period和Duration

    Period:计算两个日期的间隔。

    Duration:计算两个时间之间的间隔

        //获取时间1
        LocalDateTime now = LocalDateTime.now();
        //睡一会
        Thread.sleep(1000);
        //获取时间2
        LocalDateTime now1 = LocalDateTime.now();
        //计算相差时间
        Duration between = Duration.between(now, now1);
        //输出相差秒数
        System.out.println(between.getSeconds());
        //获取时间日期1
        LocalDate now = LocalDate.of(2015,03,12);
        //睡一会
        Thread.sleep(1000);
        //获取日期2
        LocalDate now1 = LocalDate.of(2020,06,8);
        //计算相差时间
        Period between = Period.between(now,now1);
        //输出相差几年
        System.out.println(between.getYears());
posted @ 2020-06-08 18:09  yukinon  阅读(811)  评论(0编辑  收藏  举报