Java ZonedDateTime 类

2024年10月26日 | 阅读需 5 分钟

Java 的 ZonedDateTime 类使用时区来表示给定的日期和时间。

它的状态在创建后无法更改,因为它是不可变的。此类包含时区信息以及所有具有纳秒精度的日期和时间字段。它有助于管理跨时区的日期和时间操作,并考虑夏令时调整。通过它对 ChronoZonedDateTime 接口的实现以及从 Object 类的继承,ZonedDateTime 提供了许多用于操作和查询日期和时间变量的方法。

为了适应不明确的本地日期和时间值,ZonedDateTime 类使用带有区域偏移的时区来保存所有具有纳秒精度的日期和时间字段。

Java ZonedDateTime 类声明

让我们看看 java.time.ZonedDateTime 类的声明。

Java ZonedDateTime 类的方法

方法描述
String format(DateTimeFormatter formatter)它用于使用指定的格式化程序格式化此日期时间。
int get(TemporalField field)它用于从此日期时间获取指定字段的值作为 int。
ZoneId getZone()它用于获取时区,例如“Asia/Kolkata”。
ZonedDateTime withZoneSameInstant(ZoneId zone)它用于返回此日期时间的副本,其中包含不同的时区,保留了瞬间。
static ZonedDateTime now()它用于从系统时钟获取默认时区中的当前日期时间。
static ZonedDateTime of(LocalDate date, LocalTime time, ZoneId zone)它用于从本地日期和时间获取 ZonedDateTime 的实例。
ZonedDateTime minus(long amountToSubtract, TemporalUnit unit)它用于返回此日期时间的副本,其中减去了指定的量。
ZonedDateTime plus(long amountToAdd, TemporalUnit unit)它用于返回此日期时间的副本,其中添加了指定的量。
ZonedDateTime minus(TemporalAmount amount)返回此 ZonedDateTime 的副本,其中减去了指定的量。
ZonedDateTime plus(TemporalAmount amount)返回此 ZonedDateTime 的副本,其中添加了指定的量。
LocalDateTime toLocalDateTime()将此 ZonedDateTime 转换为表示相同日期和时间的 LocalDateTime。
OffsetDateTime toOffsetDateTime()将此 ZonedDateTime 转换为表示相同瞬间的 OffsetDateTime。
Instant toInstant()将此 ZonedDateTime 转换为表示相同瞬间的 Instant。
ZonedDateTime truncatedTo(TemporalUnit unit)返回此 ZonedDateTime 的副本,其中时间截断为指定的单位。
boolean isBefore(ChronoZonedDateTime<?> other)检查此 ZonedDateTime 是否在指定的 ChronoZonedDateTime 之前。
boolean isAfter(ChronoZonedDateTime<?> other)检查此 ZonedDateTime 是否在指定的 ChronoZonedDateTime 之后。
boolean isEqual(ChronoZonedDateTime<?> other)检查此 ZonedDateTime 是否等于指定的 ChronoZonedDateTime。
boolean equals(Object obj)指示某个其他对象是否“等于”此对象。
int hashCode()返回此 ZonedDateTime 的哈希码值。
String toString()返回此 ZonedDateTime 的字符串表示形式。

Java ZonedDateTime 类示例

文件名:ZonedDateTimeExample1.java

立即测试

输出

2016-10-05T08:20:10+05:30[Asia/Kolkata]

说明

提供的 Java 代码展示了如何使用 ZonedDateTime 类解析表示特定日期、时间和时区的字符串。在 main 方法中,代码解析字符串“2016-10-05T08:20:10+05:30[Asia/Kolkata]”并初始化一个名为 zone 的 ZonedDateTime 对象。

此字符串反映了 2016 年 10 月 5 日上午 8:20:10,时区偏移为 +05:30(比 UTC 早五个半小时)且时区标识符为“Asia/Kolkata”(印度标准时间)。当代码打印 zone 对象时,解析后的日期、时间和时区信息将显示在控制台上。

Java ZonedDateTime 类示例:of() 和 withZoneSameInstant()

文件名:ZonedDateTimeExample2.java

立即测试

输出

In India Central Time Zone: 2017-01-19T15:26+05:30[Asia/Kolkata]
In Tokyo Central Time Zone:2017-01-19T18:56+09:00[Asia/Tokyo]

说明

给定的 Java 代码初始化一个 ZoneId 对象,该对象表示时区“Asia/Kolkata”(印度标准时间),以及一个 LocalDateTime 对象,该对象表示特定日期和时间(2017 年 1 月 19 日下午 3:26)。然后,使用 ZonedDateTime.of() 方法将 LocalDateTime 和 ZoneId 组合起来,以生成一个名为 zone1 的 ZonedDateTime 对象。

印度的日期、时间和时区信息随后在 zone 1 中打印出来。接下来,代码使用一个新的 ZoneId 对象定义“Asia/Tokyo”,另一个时区。通过利用 withZoneSameInstant() 函数将 zone1 更改为东京时区,它生成一个名为 zone2 的新 ZonedDateTime 对象。最后,打印 zone 2,保留原始瞬间,同时显示东京的日期、时间和时区信息。

Java ZonedDateTime 类示例:getZone()

文件名:ZonedDateTimeExample3.java

立即测试

输出

GMT

说明

提供的 Java 代码展示了如何使用 ZonedDateTime 类来获取当前日期、时间和时区。使用静态方法 ZonedDateTime.now(),该方法根据系统时钟和默认时区获取当前日期和时间,main() 方法中的代码生成一个名为 zone 的 ZonedDateTime 对象。接下来,它使用 getZone() 方法来获取与 zone 对象关联的时区,并将其输出到控制台。结果将显示当前时区标识。

Java ZonedDateTime 类示例:minus()

文件名:ZonedDateTimeExample4.java

立即测试

输出

2023-12-05T16:34:30.886158Z[GMT]

说明

通过从当前日期和时间中减去 126 天,给定的 Java 代码说明了如何使用 ZonedDateTime 类来创建新的日期和时间。main 函数中的代码首先使用 ZonedDateTime.now() 来获取当前日期和时间,然后将其设置为 zone 变量。接下来,它使用 minus() 函数创建一个名为 m 的新 ZonedDateTime 对象,方法是从 zone 中减去 126 天的周期。126 天的周期由 Period.ofDays(126) 创建。从当前日期和时间减去 126 天后,代码将 m 的值写入控制台。这将显示生成的日期和时间。

Java ZonedDateTime 类示例:plus()

文件名:ZonedDateTimeExample5.java

立即测试

输出

2024-08-13T16:39:53.269696Z[GMT]

说明

正如本 Java 代码所演示的,ZonedDateTime 类可用于通过将 126 天添加到当前日期和时间来计算新的日期和时间。main 方法中的代码首先使用 ZonedDateTime.now() 来检索当前日期和时间,然后将其分配给变量 zone。

然后,它使用 plus() 函数将 126 天的周期添加到 zone 以构造一个名为 p 的新 ZonedDateTime 对象。等于 126 天的周期由 Period.ofDays(126) 函数产生。然后,代码将 126 天添加到当前日期和时间,并将 p 的值打印到控制台以显示生成的日期和时间。


下一个主题Java ZoneId