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

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

Java 8-新的日期时间API

在Java 8之前,日期和时间的处理使用了许多过时的或者不好用的API,Java 8加入了一个全新的日期和时间API来改变这种情况。

LocalDate

我们先来看LocalDateLocalDate 代表的是不带时区的日期(年月日)。 它可以用于跟踪生日、公共假期等信息。

LocalDate date = LocalDate.now();
System.out.println(date); // 2022-01-28

我们还可以通过of()方法来创建特定的日期:

LocalDate dateOfBirth = LocalDate.of(1994, 1, 1);
System.out.println(dateOfBirth); // 1994-01-01
LocalTime

接下来是LocalTimeLocalTime代表的是不带时区的时间(时分秒),它可以用于跟踪日常任务,如上班时间、约会时间等。

LocalTime time = LocalTime.now();
System.out.println(time); // 14:22:47.846

LocalDate一样,我们也可以使用of()方法来创建特定的时间:

LocalTime bedTime = LocalTime.of(23, 30);
System.out.println(bedTime); // 23:30

LocalTime提供了一些方便的方法,如plusHoursminusMinutes,可用来对时间进行简单的加减运算。

LocalDateTime

LocalDateTime是前两个类的组合,它代表了不带时区的日期和时间。可以用于记录事件发生的时间,如一次通话、交易等。

LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println(currentDateTime); // 2022-01-28T14:38:16.834

我们也可以使用of()方法来创建特定日期和时间的LocalDateTime

LocalDateTime dateTime = LocalDateTime.of(1994, 1, 1, 0, 0, 0);
System.out.println(dateTime); // 1994-01-01T00:00
Instant

Instant类代表UNIX时间戳,它是从1970年1月1日UTC时区(协调世界时)的1970-01-01T00:00:00Z的偏移量来计算的。可以用于记录时间戳,如记录特定事件发生的时间。

Instant timestamp = Instant.now();
System.out.println(timestamp); // 2022-01-28T06:40:41.011Z
Duration

Duration类表示时间段,可以用于计算两个时间点之间的持续时间。

LocalTime time1 = LocalTime.of(10, 30);
LocalTime time2 = LocalTime.of(12, 0);

Duration duration = Duration.between(time1, time2);
System.out.println(duration); // PT1H30M
Period

Period类表示日期之间的差距,可以用于计算两个日期之间的间隔。

LocalDate date1 = LocalDate.of(2022, 1, 20);
LocalDate date2 = LocalDate.of(2022, 1, 28);

Period period = Period.between(date1, date2);
System.out.println(period); // P8D
DateTimeFormatter

DateTimeFormatter类用于格式化和解析日期和时间。它提供了许多预定义的格式,例如ISO_LOCAL_DATE_TIME和ISO_OFFSET_DATE_TIME。

LocalDateTime dateTime = LocalDateTime.of(2022, 1, 28, 14, 55);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

String formattedDateTime = dateTime.format(formatter);
System.out.println(formattedDateTime); // 2022/01/28 14:55:00

LocalDateTime parsedDateTime = LocalDateTime.parse(formattedDateTime, formatter);
System.out.println(parsedDateTime); // 2022-01-28T14:55

总之,Java 8日期时间API提供了许多新功能和类,使日期和时间的处理变得更加简单和直观。