Java 8的Time包常用API

Posted Deolin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8的Time包常用API相关的知识,希望对你有一定的参考价值。

 

Date、Canlender、SimpleDateFormat类在新的Time包面前几乎没有优势

 

日期LocalDate,时间LocalTime,日期时间LocalDateTime。

 

时区ZoneId,时间点Instant,时间单位ChronoUnit,格式化DateTimeFormatter

 

LocalDate

 

当前日期

    LocalDate localDate = LocalDate.now();

 

指定日期

    // (方式1)
    LocalDate localDate1 = LocalDate.of(2017, 07, 20);
    // (方式2)
    LocalDate localDate2 = LocalDate.parse("2017-07-25");

 

 

日期加/减 多少个时间单位

    // 加1个月(方式1)
    LocalDate localDate = localDate.plus(1, ChronoUnit.MONTHS);
    // 加1天(方式2)
    LocalDate localDate = localDate.plusDays(1);

 

解析日期

    int dayOfMonth = localDate.getDayOfMonth();

 

是否闰年

    boolean b = localDate.isLeapYear();

 

是否是一个日期之前/之后

    boolean b = localDate1.isBefore(localDate2);
    boolean b = localDate1.isAfter(localDate2);

 

两个日期相差多少个时间单位

    // 相差多少天
long
diff = ChronoUnit.DAYS.between(localDate1, localDate2); // 相差多少秒
long diff = ChronoUnit.SECONDS.between(localDate1, localDate2);

 

格式化

    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String s = dateTimeFormatter.format(localDate);

 

两个日期是否相等

    boolean b = localDate1.equals(localDate2);

 

LocalTime

 

大部分的API与LocalDate同理,区别之处在于

1、无法判断是否闰年

2、LocalDate对象toString()返回的是“2017-11-09”,LocalTime对象toString()返回的是“11:16:50.144”(如果毫秒数为0,则最后一段数字不显示),如果想要返回HH:mm:ss格式,需要格式化。

 

LocalDateTime

 

大部分的API与LocalDate同理,区别之处在于

1、无法直接判断是否闰年,需要先转化为LocalDate

 

boolean b = localDateTime.toLocalDate().isLeapYear();

2、LocalDateTime对象toString()返回的是“2017-11-09T11:16:50.144”,如果想要返回HH:mm:ss格式,需要格式化。

 

处理遗留代码中的java.util.Date对象

 

先将Date转化为Instant对象,然后根据需要用LocalDate、LocalTime、LocalDateTime各自的from工厂方法生成对象

    // 遗留代码
    Date birthday = user.getBirthday();
    Date orderTime = order.getOrderTime();
    // 转换
    LocalDate birthdayEx = LocalDate.from(birthday.toInstant());
    LocalDateTime orderTimeEx = LocalDateTime.from(orderTime.toInstant());

 

处理遗留代码中的java.util.Calendar对象

 

java.util.Date对象的转化同理,Calendar对象也有toInstant方法。



以上是关于Java 8的Time包常用API的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

# Java 常用代码片段

java_JDK8中新增的时间API

Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。

Joda Time是否已被Java 8 Date and Time API弃用? (java.time)

Java之Date Time API (Java 8 新特性)