Java 新的日期/时间 API
Java 8 引入了一个新的日期/时间 API 来解决旧的日期/时间 API 的一些缺点。
- 线程不安全 - java.util.Date 不是线程安全的,因此开发人员在使用日期时必须处理并发问题。新的日期/时间 API 是不可变的,没有设置器方法。
-
设计不优 - 默认日期从 1900 年开始,月份从 1 开始,日期从 0 开始,因此没有统一性。旧的 API 提供的直接日期操作方法较少。新的 API 提供了许多实用程序方法来进行这些操作。
-
难以处理时区 - 开发人员需要编写大量代码来处理时区问题。新的 API 考虑了特定领域的设计。
Java 8 在 java.time 包下引入了一个新的日期/时间 API。以下是 java.time 包中引入的一些重要类。
- Local - 简化的日期/时间 API,无需处理时区复杂性。
-
Zoned - 用于处理不同时区的专用日期/时间 API。
Local Date-Time API
LocalDate/LocalTime 和 LocalDateTime 类简化了不需要时区的开发。让我们看看它们的实际使用。
使用您选择的任何编辑器,在 C:> JAVA 中创建以下 Java 程序。
Java8Tester.java
验证结果
使用 javac 编译器编译类如下:
现在按以下步骤运行Java8Tester −
应该产生如下输出−
时区日期时间API
当需要考虑时区时,应使用时区日期时间API。让我们看看他们的使用方式。
使用您选择的任何编辑器,在C:> JAVA中创建以下Java程序。
Java8Tester.java
验证结果
使用 javac 编译器编译类如下所示−
现在按照以下步骤运行 Java8Tester –
它应该产生以下输出 –
Chrono Units 枚举
java.time.temporal.ChronoUnit 枚举在Java 8中被添加,用于替代旧API中用于表示天、月等的整数值。让我们看看它们的实际应用。
使用您选择的任何编辑器,在C:> JAVA下创建以下Java程序。
Java8Tester.java
验证结果
使用 javac 编译器编译该类,步骤如下:
现在按照以下步骤运行Java8Tester:
应该产生如下结果 −
期间和持续时间
在Java 8中,引入了两个专门的类来处理时间差异。
- 期间 - 它处理基于日期的时间量。
-
持续时间 - 它处理基于时间的时间量。
让我们看看它们的实际应用。
使用您选择的任何编辑器,在C:> JAVA中创建以下Java程序。
Java8Tester.java
验证结果
使用 javac 编译器编译类,如下所示−
现在按照以下步骤运行Java8Tester –
它应该产生以下输出:
时间调整器
TemporalAdjuster用于执行日期计算。例如,获取“每月第二个星期六”或“下个星期二”。让我们看看它们在实际中的应用。
使用您选择的任何编辑器,在C:> JAVA中创建以下Java程序。
Java8Tester.java
验证结果
使用 javac 编译器编译该类,方法如下:
现在按照以下方式运行Java8Tester:
它应该产生以下结果 −
向后兼容性
添加了toInstant()方法到原始的Date和Calendar对象中,可以用它们将其转换为新的Date-Time API。使用ofInstant(Instant, ZoneId)方法来获取一个LocalDateTime或ZonedDateTime对象。让我们看看它们的使用情况。
使用任选的编辑器在C:> JAVA中创建以下的Java程序。
Java8Tester.java
验证结果
按照以下方式使用javac编译器编译该类:
现在按照以下步骤运行Java8Tester:
它应该产生以下输出 –