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方法。

原文地址:https://www.cnblogs.com/deolin/p/7808619.html