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