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教程。