第 8 章 java.time

java.util.Date 类束之高阁才是正确之道。

——Tim Yates

在 Java 面世之初,标准库就引入了两种用于处理日期和时间的类,它们是 java.util.Datejava.util.Calendar,而前者堪称类糟糕设计的典范。浏览 API 可以发现,从 Java 1.1(1997 年 2 月发布)开始,Date 类中的所有方法就已被弃用。Java 1.1 推荐采用 Calendar 类处理日期和时间,但这个类同样存在不少问题。

在 Java 引入 java.util.Datejava.util.Calendar 类之前,枚举类型(enum)尚未出现,所以两种类在字段(如月份)中使用整型常量。两种类都是可变的,因而不是线程安全(thread safe)的。为处理实际开发中遇到的问题,标准库随后引入 java.sql.Date 作为 java.util.Date 的子类,但仍然没能彻底解决问题。

最终,Java SE 8 引入 java.time 包,这个全新的包从根本上解决了长久以来存在的诸多弊端。java.time 包基于 Joda-Time 库构建,它是一种免费的开源解决方案,多年来一直作为处理 Java 日期和时间的事实标准。实际上,Joda-Time 库的设计团队也参与了 java.time 包的开发,并建议开发人员在今后的工作中使用它。

java.time 包的开发遵循 JSR 310 规范(Date-Time API),并支持 ISO 8601 标准,且对闰年和个别地区实行的夏时制规则做了相应的调整。

这一章的范例将展示 java.time 包的各种应用,希望有助于解决读者可能遇到的某些基本问题,并在需要时提供进一步的信息。

感兴趣的读者可以阅读 Java 官方教程(Java Tutorials)中有关 Date-Time API 的介绍,它提供了系统而详尽的信息。