Java 8中的新日期时间API

Java 8中引入了新的Date-Time API,以克服现有java.util.Date和java.util.Calendar中的缺陷  。以下是旧的Date-Time API的问题-

  • 不是线程安全的-java.util.Date不是线程安全的,因此开发人员必须在使用日期时处理并发问题。新的日期时间API是不可变的,并且没有setter方法。

  • 设计欠佳-默认日期从1900开始,月份从1开始,日期从0开始,因此没有统一性。旧的API具有较少的直接日期操作方法。新的API为此类操作提供了许多实用程序方法。

  • 时区处理困难–开发人员必须编写大量代码来处理时区问题。开发新API时要牢记特定领域的设计。

Java 8在java.time包中引入了新类。

  • 本地-简化的日期时间API,没有时区处理的复杂性。

  • 分区-专门的日期时间API,用于处理各种时区。

Java 8还引入了两个专门的类来处理时间差异。

  • 期间-它处理基于日期的时间量。

  • 持续时间-它处理基于时间的时间量。

现在让我们看一个例子-

示例

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