第12章 新的日期和时间API

在Java 1.0中,日期和时间API为java.util.Date

  1. 实际上是1900年1月1日起的毫秒级时间戳;
  2. 易用性差,年份从1900年计数,月份从0计数,日子从1计数,new Date(114, 2, 18);表示2014年3月18日;
  3. 打印输出不直观,Tue Mar 18 00:00:00 CST 2014,包含默认时区中欧时间(Central Europe Time,CET),但本身不支持任何时区操作;
  4. 通过java.text.DateFormat格式化和解析java.util.Date,但线程不安全;

Java 1.1支持的日期和时间API为java.util.Calendar,未能解决上述问题,易用性差。

java.util.Datejava.util.Calendar为可变对象,不易维护。

开发者转向第三方的日期和时间库——Joda-Time,

Java 8在java.time进行了借鉴和整合,提供了高质量的日期和时间支持。

12.1 LocalDate、LocalTime、Instant、Duration以及Period

12.1 LocalDate、LocalTime、Instant、Duration以及Period

12.2 操纵、解析和格式化日期

12.2 操纵、解析和格式化日期

12.3 处理不同的时区和历法

12.3 处理不同的时区和历法

12.4 小结

  • Java 8之前老版的java.util.Date类以及其他用于建模日期时间的类有很多不一致及设计上的缺陷,包括易变性以及糟糕的偏移值、默认值和命名。
  • 新版的日期和时间API中,日期-时间对象是不可变的,老的日期时间对象不会发生变化。
  • 用绝对或者相对的方式操纵日期和时间,操作的结果总是返回一个新的实例。
  • 按照需求定义日期转换器TemporalAdjuster,一次可以改变多个值,用更精细的方式操纵日期。
  • 通过模板/特定格式,创建格式器,打印输出或者解析日期-时间对象,并且它们都是线程安全的。
  • 用某个地区/位置的相对方式,或者以与UTC/格林尼治时间的绝对偏差的方式表示时区,并将其应用到日期-时间对象上,对其进行本地化。
  • 可以使用不同于ISO-8601标准系统的其他日历系统。

引用

  1. Java 8实战
posted @ 2023-06-03 22:17  夜是故乡明  阅读(11)  评论(3编辑  收藏  举报