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

相关文章