Java 8 中新的日期时间 API
java 8object oriented programmingprogramming更新于 2025/11/29 18:20:17
Java 8 中引入了新的日期时间 API,以克服现有 java.util.Date 和 java.util.Calendar 的缺陷。以下是旧日期时间 API 存在的问题 −
非线程安全 − java.util.Date 不是线程安全的,因此开发人员在使用日期时必须处理并发问题。新的日期时间 API 是不可变的,并且没有 setter 方法。
设计不佳 − 默认日期从 1900 年开始,月份从 1 开始,日期从 0 开始,因此缺乏统一性。旧 API 缺乏直接的日期操作方法。新的 API 为此类操作提供了许多实用方法。
时区处理困难 − 开发人员不得不编写大量代码来处理时区问题。新的 API 在开发时充分考虑了特定领域的设计。
Java 8 在 java.time 包中引入了新的类。
Local − 简化的日期时间 API,无需复杂的时区处理。
Zoned − 专门的日期时间 API,用于处理各种时区。
Java 8 还引入了两个专门的类来处理时差。
Period −它处理基于日期的时间量。
持续时间 − 它处理基于时间的时间量。
现在让我们看一个例子 −
示例
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Duration;
import java.time.Period;
public class Demo {
public static void main(String args[]) {
Demo d = new Demo();
d.testPeriod();
d.testDuration();
}
public void testPeriod() {
//Get the current date
LocalDate date1 = LocalDate.now();
System.out.println("Current date: " + date1);
//add 1 month to the current date
LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month: " + date2);
Period period = Period.between(date2, date1);
System.out.println("Period: " + period);
}
public void testDuration() {
LocalTime time1 = LocalTime.now();
Duration twoHours = Duration.ofHours(2);
LocalTime time2 = time1.plus(twoHours);
Duration duration = Duration.between(time1, time2);
System.out.println("Duration: " + duration);
}
}
输出
Current date: 2019-09-14 Next month: 2019-10-14 Period: P-1M Duration: PT2H

