zoukankan      html  css  js  c++  java
  • JAVA中JDK1.8的LocalDateTime日期类的操作方法

    关键类

    • Instant:瞬时时间。
    • LocalDate:本地日期,不包含具体时间, 格式 yyyy-MM-dd。
    • LocalTime:本地时间,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.SSS 。
    • LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
    • ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

     

    获取当前的日期时间

    //本地日期,不包括时分秒
     LocalDate nowDate = LocalDate.now();
     //本地日期,包括时分秒
     LocalDateTime nowDateTime = LocalDateTime.now();
     System.out.println("当前时间:"+nowDate);
     System.out.println("当前时间:"+nowDateTime);
     //  当前时间:2018-12-19
     //  当前时间:2018-12-19T15:24:35.822

    获取当前的年月日时分秒

     //获取当前的时间,包括毫秒
      LocalDateTime ldt = LocalDateTime.now();
      System.out.println("当前年:"+ldt.getYear());   //2018
      System.out.println("当前年份天数:"+ldt.getDayOfYear());//172 
      System.out.println("当前月:"+ldt.getMonthValue());
      System.out.println("当前时:"+ldt.getHour());
      System.out.println("当前分:"+ldt.getMinute());
      System.out.println("当前时间:"+ldt.toString());
     //   当前年:2018
     //   当前年份天数:353
     //   当前月:12
     //   当前时:15
     //   当前分:24
     //   当前时间:2018-12-19T15:24:35.833

    格式化时间

    LocalDateTime ldt = LocalDateTime.now();
    System.out.println("格式化时间: "+ ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
    //格式化时间:2018-12-19 15:37:47.119

    时间增减

     LocalDateTime ldt = LocalDateTime.now();
      System.out.println("后5天时间:"+ldt.plusDays(5));
      System.out.println("前5天时间并格式化:"+ldt.minusDays(5).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); //2018-06-16
      System.out.println("前一个月的时间:"+ldt2.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyyMM"))); //2018-06-16
      System.out.println("后一个月的时间:"+ldt2.plusMonths(1)); //2018-06-16
      System.out.println("指定2099年的当前时间:"+ldt.withYear(2099)); //2099-06-21T15:07:39.506
     //  后5天时间:2018-12-24T15:50:37.508
     //  前5天时间并格式化:2018-12-14
     //  前一个月的时间:201712
     //  后一个月的时间:2018-02-04T09:19:29.499
     //  指定2099年的当前时间:2099-12-19T15:50:37.508

    创建指定时间

    LocalDate ld3=LocalDate.of(2017, Month.NOVEMBER, 17);
     LocalDate ld4=LocalDate.of(2018, 02, 11);

    时间相差比较

    具体相差的年月日

    LocalDate ld=LocalDate.parse("2017-11-17");
     LocalDate ld2=LocalDate.parse("2018-01-05");
     Period p=Period.between(ld, ld2);
     System.out.println("相差年: "+p.getYears()+" 相差月 :"+p.getMonths() +" 相差天:"+p.getDays());
     // 相差年: 0 相差月 :1 相差天:19

    注:这里的月份是不满足一年,天数是不满足一个月的。这里实际相差的是1月19天,也就是49天。

    相差总数的时间

    ChronoUnit 日期周期单位的标准集合。 也可以计算相差时分秒。

       LocalDate startDate = LocalDate.of(2017, 11, 17);
            LocalDate endDate = LocalDate.of(2018, 01, 05);
            System.out.println("相差月份:"+ChronoUnit.MONTHS.between(startDate, endDate));
            System.out.println("两月之间的相差的天数   : " + ChronoUnit.DAYS.between(startDate, endDate));
      //        相差月份:1
      //        两天之间的差在天数   : 49

    精度时间相差

    Duration 这个类以秒和纳秒为单位建模时间的数量或数量。

     Instant inst1 = Instant.now();
        System.out.println("当前时间戳 : " + inst1);
        Instant inst2 = inst1.plus(Duration.ofSeconds(10));
        System.out.println("增加之后的时间 : " + inst2);
        System.out.println("相差毫秒 : " + Duration.between(inst1, inst2).toMillis());
        System.out.println("相毫秒 : " + Duration.between(inst1, inst2).getSeconds());
     // 当前时间戳 : 2018-12-19T08:14:21.675Z
     // 增加之后的时间 : 2018-12-19T08:14:31.675Z
     // 相差毫秒 : 10000
     // 相毫秒 : 10

    时间大小比较

     LocalDateTime ldt4 = LocalDateTime.now();
      LocalDateTime ldt5 = ldt4.plusMinutes(10);
      System.out.println("当前时间是否大于:"+ldt4.isAfter(ldt5));
      System.out.println("当前时间是否小于"+ldt4.isBefore(ldt5));
      // false
      // true

    时区时间计算

    得到其他时区的时间。

    通过Clock时钟类获取计算

    Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。

     Clock clock = Clock.systemUTC();
      System.out.println("当前时间戳 : " + clock.millis());
      Clock clock2 = Clock.system(ZoneId.of("Asia/Shanghai"));
      System.out.println("亚洲上海此时的时间戳:"+clock2.millis());
      Clock clock3 = Clock.system(ZoneId.of("America/New_York"));
      System.out.println("美国纽约此时的时间戳:"+clock3.millis());
      //  当前时间戳 : 1545209277657
      //  亚洲上海此时的时间戳:1545209277657
      //  美国纽约此时的时间戳:1545209277658

    通过ZonedDateTime类和ZoneId

    ZoneId zoneId= ZoneId.of("America/New_York");
      ZonedDateTime dateTime=ZonedDateTime.now(zoneId);
      System.out.println("美国纽约此时的时间 : " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
      System.out.println("美国纽约此时的时间 和时区: " + dateTime);
      //  美国纽约此时的时间 : 2018-12-19 03:52:22.494
      // 美国纽约此时的时间 和时区: 2018-12-19T03:52:22.494-05:00[America/New_York]

    Java 8日期时间API总结:

    • 提供了javax.time.ZoneId 获取时区。
    • 提供了LocalDate和LocalTime类。
    • Java 8 的所有日期和时间API都是不可变类并且线程安全,而现有的Date和Calendar API中的java.util.Date和SimpleDateFormat是非线程安全的。
    • 主包是 java.time,包含了表示日期、时间、时间间隔的一些类。里面有两个子包java.time.format用于格式化, java.time.temporal用于更底层的操作。
    • 时区代表了地球上某个区域内普遍使用的标准时间。每个时区都有一个代号,格式通常由区域/城市构成(Asia/Tokyo),在加上与格林威治或 UTC的时差。例如:东京的时差是+09:00。
    • OffsetDateTime类实际上组合了LocalDateTime类和ZoneOffset类。用来表示包含和格林威治或UTC时差的完整日期(年、月、日)和时间(时、分、秒、纳秒)信息。
    • DateTimeFormatter 类用来格式化和解析时间。与SimpleDateFormat不同,这个类不可变并且线程安全,需要时可以给静态常量赋值。DateTimeFormatter类提供了大量的内置格式化工具,同时也允许你自定义。在转换方面也提供了parse()将字符串解析成日期,如果解析出错会抛出DateTimeParseException。DateTimeFormatter类同时还有format()用来格式化日期,如果出错会抛出DateTimeException异常。
    • 再补充一点,日期格式“MMM d yyyy”和“MMM dd yyyy”有一些微妙的不同,第一个格式可以解析“Jan 2 2014”和“Jan 14 2014”,而第二个在解析“Jan 2 2014”就会抛异常,因为第二个格式里要求日必须是两位的。如果想修正,你必须在日期只有个位数时在前面补零,就是说“Jan 2 2014”应该写成 “Jan 02 2014”。
  • 相关阅读:
    成长
    mui组件通用CSS类
    CSS推荐的类名
    必须认识的http请求包
    Bootstrap技术: 如何给nav导航组件的tab页增加关闭按钮以及动态的添加和关闭tab页
    bootstrap 关闭tabs
    typescirpt 知识点
    手动使用gulp4.0配合rollup搭建typescript 写一个自己的一个开源库(起步 构建自动化处理,热更新浏览器)
    Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库
    wussUI v1.0.0小程序UI组件库 第一期开发已完成
  • 原文地址:https://www.cnblogs.com/pxblog/p/13453817.html
Copyright © 2011-2022 走看看