📅  最后修改于: 2023-12-03 14:42:21.801000             🧑  作者: Mango
Java8引入了一个新的日期时间API,其中一个类是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对象。
我们可以通过各种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与其他常见的日期时间类进行转换。
我们可以使用toLocalDateTime()方法将ZonedDateTime转换成LocalDateTime。
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
我们可以使用atZone()方法将LocalDateTime转换成ZonedDateTime。
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("America/Los_Angeles"));
我们可以使用atZone()方法将Instant转换成ZonedDateTime。
Instant instant = Instant.now();
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("America/Los_Angeles"));
我们可以使用toInstant()方法将ZonedDateTime转换成Instant。
Instant instant = zonedDateTime.toInstant();
ZonedDateTime类是Java8日期时间API提供的一个强大的类,它可以处理具有时区和时差的日期和时间。我们可以使用它来创建、获取、计算、调整和转换日期和时间。如果您正在进行Java8日期时间编程,那么ZonedDateTime类一定是您需要熟悉和使用的类之一。