📜  Java 8 中的新日期时间 API(1)

📅  最后修改于: 2023-12-03 15:01:28.138000             🧑  作者: Mango

Java 8 中的新日期时间 API

Java 8 引入了全新的日期时间 API,该 API 设计得更加简单、易于使用,并且应用更加广泛。这个 API 被称为 java.time,该 API 解决了旧的 java.util.Datejava.util.Calendar 类存在的各种问题。

LocalDate、LocalTime 和 LocalDateTime

Java 8 中的新日期时间 API 中提供了三个类:LocalDateLocalTimeLocalDateTime,这三个类都是使用频率非常高的类。

LocalDate

LocalDate 表示不带时区的日期,例如:年月日,可以使用 now() 方法获取当前日期,如下所示:

LocalDate currentDate = LocalDate.now();

可以使用 of() 方法创建一个指定日期的 LocalDate 对象,如下所示:

LocalDate date = LocalDate.of(2018, 8, 18);
LocalTime

LocalTime 则表示不带时区的时间,例如:时分秒。同样,也可以使用 now() 方法获取当前时间,如下所示:

LocalTime currentTime = LocalTime.now();

可以使用 of() 方法创建一个指定时间的 LocalTime 对象,如下所示:

LocalTime time = LocalTime.of(20, 30, 12);
LocalDateTime

LocalDateTime 则表示不带时区的日期和时间,例如:年月日时分秒。同样,也可以使用 now() 方法获取当前日期和时间,如下所示:

LocalDateTime currentDateTime = LocalDateTime.now();

可以使用 of() 方法创建一个指定日期和时间的 LocalDateTime 对象,如下所示:

LocalDateTime dateTime = LocalDateTime.of(2018, 8, 18, 20, 30, 12);
Instant

在 Java 8 中,还有一个名为 Instant 的类,它表示了一个时间戳,也就是我们平时所说的 Unix 时间戳。通过 Instant.now() 方法,我们可以获取当前时间的时间戳,如下所示:

Instant instant = Instant.now();

可以使用 ofEpochMilli()ofEpochSecond() 方法创建一个指定时间戳的 Instant 对象,如下所示:

Instant instant1 = Instant.ofEpochMilli(1593106856000L);
Instant instant2 = Instant.ofEpochSecond(1593106856L);
Duration 和 Period

在 Java 8 中,还有两个名为 DurationPeriod 的类,它们分别用于计算时间间隔和日期间隔。

Duration

Duration 类用于表示两个时间之间的时间间隔,可以使用 between() 方法计算两个时间的时间间隔,如下所示:

Duration duration = Duration.between(LocalTime.of(10, 0), LocalTime.of(12, 0));
Period

Period 类则用于表示两个日期之间的日期间隔,可以使用 between() 方法计算两个日期的日期间隔,如下所示:

Period period = Period.between(LocalDate.of(2020, 7, 1), LocalDate.of(2020, 8, 1));
DateTimeFormatter

DateTimeFormatter 类用于格式化日期和时间,可以使用 ofPattern() 方法创建一个格式化器,如下所示:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

可以使用格式化器的 format() 方法将日期或时间格式化为一个字符串,如下所示:

String dateTimeString = LocalDateTime.now().format(formatter);

也可以使用格式化器的 parse() 方法将一个字符串解析为日期或时间,如下所示:

LocalDateTime dateTime = LocalDateTime.parse("2020-07-01 12:30:00", formatter);
总结

Java 8 中的新日期时间 API 为我们提供了一套简单、易用、完整的日期和时间处理工具,从而使得在 Java 中处理日期和时间变得更加容易和精确。