Java TemporalAccessor
最后修改时间:2025 年 3 月 6 日
在本文中,我们将探讨 Java 中的 TemporalAccessor
接口。我们将访问时间字段,检查支持的字段,并将其与 LocalTime
作为示例实现一起使用。
TemporalAccessor 是 ISO-8601 日历系统中 java.time
包中的一个基础接口。 它提供对时间对象(如时间或日期)的只读访问。
TemporalAccessor
由诸如 LocalTime
和 LocalDate
之类的类实现。 它是不可变的,并侧重于查询时间字段而不进行修改。
访问时间字段
使用 TemporalAccessor
通过 ChronoField
查询小时或分钟等字段。
import java.time.LocalTime; import java.time.temporal.ChronoField; void main() { LocalTime time = LocalTime.now(); int hour = time.get(ChronoField.HOUR_OF_DAY); System.out.println("Hour: " + hour); }
这将检索当前小时。
该代码使用 LocalTime.now
创建一个包含当前时间的 LocalTime
对象。 然后,它使用带有 ChronoField.HOUR_OF_DAY
的 get
来提取并打印小时。
检查支持的字段
isSupported
验证 TemporalAccessor
中是否提供某个字段。
import java.time.LocalTime; import java.time.temporal.ChronoField; void main() { LocalTime time = LocalTime.of(15, 30); if (time.isSupported(ChronoField.MINUTE_OF_HOUR)) { int minute = time.get(ChronoField.MINUTE_OF_HOUR); System.out.println("Minute: " + minute); } }
这将检查并检索分钟。
在此,LocalTime.of(15, 30)
设置特定时间。 isSupported
方法在 get
检索并打印分钟之前,检查 MINUTE_OF_HOUR
是否有效。
if (time.isSupported(ChronoField.MINUTE_OF_HOUR)) {
isSupported
确保字段在访问之前存在。
TemporalAccessor 与 LocalTime
LocalTime
实现了 TemporalAccessor
。 比较它们的用法
import java.time.LocalTime; import java.time.temporal.TemporalAccessor; import java.time.temporal.ChronoField; void main() { TemporalAccessor time = LocalTime.of(7, 20); int hour = time.get(ChronoField.HOUR_OF_DAY); System.out.println("Hour: " + hour); }
这以通用方式使用 TemporalAccessor
。
此示例将 time
声明为 TemporalAccessor
,显示其接口用法。 LocalTime.of(7, 20)
设置时间,get
使用 ChronoField
提取小时。
常见的时间字段
LocalTime
作为 TemporalAccessor
支持以下字段:
HOUR_OF_DAY
: 0-23MINUTE_OF_HOUR
: 0-59SECOND_OF_MINUTE
: 0-59
import java.time.LocalTime; import java.time.temporal.ChronoField; void main() { LocalTime time = LocalTime.now(); System.out.printf("Hour: %d%n", time.get(ChronoField.HOUR_OF_DAY)); System.out.printf("Minute: %d%n", time.get(ChronoField.MINUTE_OF_HOUR)); System.out.printf("Second: %d%n", time.get(ChronoField.SECOND_OF_MINUTE)); }
这会将时间拆分为组成部分。
该代码使用 LocalTime.now
获取当前时间。 然后,它使用 ChronoField
常量提取小时、分钟和秒,并通过 printf
以格式化的输出打印它们。
局限性
TemporalAccessor
是只读的。 对于调整,请使用 Temporal
import java.time.LocalTime; void main() { LocalTime time = LocalTime.now(); LocalTime later = time.plusHours(3); // Requires Temporal System.out.println("Now: " + time); System.out.println("Later: " + later); }
这演示了 TemporalAccessor
的一个限制。 虽然它可以查询字段,但像通过 plusHours
添加小时这样的修改需要 Temporal
接口,LocalTime
也实现了该接口。
来源
在本文中,我们探讨了 Java TemporalAccessor
。
作者
列出所有Java教程。