📜  Java8 ZonedDateTime类(1)

📅  最后修改于: 2023-12-03 14:42:21.801000             🧑  作者: Mango

Java8 ZonedDateTime类

Java8引入了一个新的日期时间API,其中一个类是ZonedDateTime,它用来表示具有时区和时差的日期和时间。

创建ZonedDateTime对象

要创建ZonedDateTime对象,我们可以使用of()方法来指定年、月、日、小时、分钟、秒、纳秒和时区。以下是一个例子:

ZonedDateTime zonedDateTime = ZonedDateTime.of(
    2021, 6, 15, 11, 20, 0, 0, ZoneId.of("America/Los_Angeles"));

这将创建一个ZonedDateTime对象,表示2021年6月15日上午11:20在美国洛杉矶时区。

我们还可以使用now()方法创建当前日期和时间的ZonedDateTime对象:

ZonedDateTime zonedDateTime = ZonedDateTime.now();

这将使用系统默认时区创建当前日期和时间的ZonedDateTime对象。

获取ZonedDateTime对象的信息

我们可以通过各种getter方法从ZonedDateTime对象中获取日期时间信息:

int year = zonedDateTime.getYear();
int month = zonedDateTime.getMonthValue();
int day = zonedDateTime.getDayOfMonth();
int hour = zonedDateTime.getHour();
int minute = zonedDateTime.getMinute();
int second = zonedDateTime.getSecond();
int nanosecond = zonedDateTime.getNano();
ZoneId zone = zonedDateTime.getZone();
时间计算和调整

我们可以对ZonedDateTime进行各种时间计算和调整。以下是一些常见的示例:

加减时间

我们可以使用plus()和minus()方法来加减时间。

ZonedDateTime newZonedDateTime = zonedDateTime.plusDays(1); // 加1天
ZonedDateTime newZonedDateTime = zonedDateTime.minusHours(2); // 减2个小时
设置时间部分

我们可以使用with()方法来设置时间部分。

ZonedDateTime newZonedDateTime = zonedDateTime.withYear(2022); // 设置年份为2022
ZonedDateTime newZonedDateTime = zonedDateTime.withMonth(7); // 设置月份为7月
ZonedDateTime newZonedDateTime = zonedDateTime.withDayOfMonth(1); // 设置日期为1号
ZonedDateTime newZonedDateTime = zonedDateTime.withHour(12); // 设置小时为12点
ZonedDateTime newZonedDateTime = zonedDateTime.withMinute(30); // 设置分钟为30分
ZonedDateTime newZonedDateTime = zonedDateTime.withSecond(0); // 设置秒数为0秒
ZonedDateTime newZonedDateTime = zonedDateTime.withZoneSameLocal(ZoneId.of("Asia/Shanghai")); // 改变时区为上海时区
ZonedDateTime和其他日期时间类的转换

我们可以轻松地将ZonedDateTime与其他常见的日期时间类进行转换。

ZonedDateTime转换成LocalDateTime

我们可以使用toLocalDateTime()方法将ZonedDateTime转换成LocalDateTime。

LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
LocalDateTime转换成ZonedDateTime

我们可以使用atZone()方法将LocalDateTime转换成ZonedDateTime。

ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("America/Los_Angeles"));
Instant转换成ZonedDateTime

我们可以使用atZone()方法将Instant转换成ZonedDateTime。

Instant instant = Instant.now();
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("America/Los_Angeles"));
ZonedDateTime转换成Instant

我们可以使用toInstant()方法将ZonedDateTime转换成Instant。

Instant instant = zonedDateTime.toInstant();
总结

ZonedDateTime类是Java8日期时间API提供的一个强大的类,它可以处理具有时区和时差的日期和时间。我们可以使用它来创建、获取、计算、调整和转换日期和时间。如果您正在进行Java8日期时间编程,那么ZonedDateTime类一定是您需要熟悉和使用的类之一。