TemporalQueries仅支持查询java.time标准时间字段(如时区、精度、历法等),不支持业务自定义字段;需通过组合类封装时间对象与业务字段,或定义业务专属查询接口。
TemporalQueries
本身不支持提取“自定义字段”,它只提供对
标准类型中**已定义、标准化的时间字段**(如年、月、时区、精度等)的查询能力。所谓“自定义字段”(比如业务上的“财务周期编号”“班次ID”“季节代码”)不属于
接口契约的一部分,无法通过
直接提取。
TemporalQueries 的真实用途:查标准元信息
它用于从任意
对象(如
、
、
)中安全、统一地获取以下预设属性:
时区(ZoneId)
:仅对支持时区的对象有效(如
),
返回
时区偏移(ZoneOffset)
:如
的等价查询
精度(Precision)
:返回该时间对象能表达的最小时间单位(如
)
Chronology(历法系统)
:如 ISO 或 Japanese 历法
是否支持某字段(TemporalField)
:例如判断是否可调用
想提取业务自定义字段?得靠封装,不是查询
Java 时间类是不可变且无扩展槽的。若需关联业务字段(如“所属季度编号”“运维值班组”),正确做法是:
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
定义一个**组合类**,把
(或其它时间类型)和你的字段一起持有:
使用
类型作为**值对象**,业务字段作为独立成员,不尝试“塞进”时间对象内部
避免继承或代理
实现——这会破坏不可变性与语义一致性
如果真需要“类似查询”的统一访问方式
可以为你的业务时间容器设计自己的查询接口,例如:
立即学习
“
Java免费学习笔记(深入)
”;
声明
让所有业务事件类实现它,再提供静态工具方法模拟 “query” 行为:
这样既保持清晰边界,又获得类似
的调用风格
常见误区提醒
试图用
去“解析”
提取自定义信息——字符串解析不稳定、易出错、违反类型安全
给
强制添加自定义字段 via reflection —— 破坏封装,不可维护,且多数实现(如
)根本不存储额外状态
误以为
或
能提取业务字段——它们只是做类型投影,不涉及业务逻辑
java.timeTemporalTemporalQueriesTemporalLocalDateTimeZonedDateTimeInstantZonedDateTimeLocalDateTimenullZonedDateTime.getOffset()ChronoUnit.NANOS.get(ChronoField.DAY_OF_MONTH)LocalDateTimepublic record OrderEvent(LocalDateTime occurredAt, int fiscalQuarter, String shiftCode) {}java.timeTemporalinterface BusinessTemporal { LocalDateTime time(); int fiscalQuarter(); }BusinessQueries.fiscalQuarter(event)TemporalQueriesTemporalQueryLocalDateTime.toString()TemporalAccessorLocalDateTimeTemporalQueries.localDate().localTime()