public interface TemporalAccessor
这是日期、时间和偏移对象的基本接口类型。它是由那些类可以提供fields或queries信息实现。
大多数日期和时间信息可以表示为一个数字。这些模型使用TemporalField
与持有使用long
处理大值。一年,一个月和一天是简单的领域的例子,但他们也包括即时和偏移。看到场的标准ChronoField
。
两件日期/时间信息不能代表数字的chronology和time-zone。这些可以通过定义静态方法queries访问TemporalQuery
。
子接口,Temporal
,扩展了这一定义,还支持更完整的时空对象的调整和操作。
此接口是一个框架级接口,不应该被广泛应用于应用程序代码中。相反,应用程序应该创造和传递的具体类型的实例,如LocalDate
。这有很多原因,其中一部分是实现该接口可以在日历系统以外的ISO。看到一个充分讨论的问题ChronoLocalDate
。
Modifier and Type | Method and Description |
---|---|
default int |
get(TemporalField field)
作为一个
int 获取指定的字段的值。
|
long |
getLong(TemporalField field)
得到一
long 指定的字段的值。
|
boolean |
isSupported(TemporalField field)
检查指定字段是否被支持。
|
default <R> R |
query(TemporalQuery<R> query)
查询此日期时间。
|
default ValueRange |
range(TemporalField field)
获取指定字段的有效值的范围。
|
boolean isSupported(TemporalField field)
ChronoField
定义的所有领域。如果字段被支持,则必须返回真实的字段,否则必须返回错误的返回。
如果该字段是不是ChronoField
,然后通过调用作为参数传递this
TemporalField.isSupportedBy(TemporalAccessor)
得到此方法的结果。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
field
-现场检查null返回false
default ValueRange range(TemporalField field)
所有字段可以表示为一个long
整数。此方法返回一个对象,该对象描述该值的有效范围。这个时间对象的值是用来提高返回范围的准确性。如果日期时间不能返回范围,因为字段不支持或其他原因,将抛出一个异常。
请注意,结果只描述了最小值和最大值的有效值,重要的是不要对它们进行太多的阅读。例如,可能在字段无效的范围内的值。
ChronoField
定义的所有领域。如果字段被支持,则字段的范围必须返回。如果不支持,那么
UnsupportedTemporalTypeException
必须扔。
如果该字段是不是ChronoField
,然后通过调用作为参数传递this
TemporalField.rangeRefinedBy(TemporalAccessorl)
得到此方法的结果。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
默认实现必须相当于此代码:
如果(现场实例chronofield){如果(支持(场)){range()回报的领域;}把新的unsupportedtemporaltypeexception(“不受支持的领域:“+现场);}回报的领域。rangerefinedby(本);
field
-现场查询范围,不为空
DateTimeException
如果不能得到的领域范围
UnsupportedTemporalTypeException
如果字段不支持
default int get(TemporalField field)
int
获取指定的字段的值。
此查询指定字段的值的日期时间。返回的值将始终在字段的有效值范围内。如果日期时间不能返回值,因为字段不支持或其他原因,将引发异常。
ChronoField
定义的所有领域。如果该字段是支持和有一个
int
范围,那么这个字段的值必须返回。如果不支持,那么
UnsupportedTemporalTypeException
必须扔。
如果该字段是不是ChronoField
,然后通过调用作为参数传递this
TemporalField.getFrom(TemporalAccessor)
得到此方法的结果。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
默认实现必须相当于此代码:
如果(范围(领域)。isintvalue()){退货范围(领域)。checkvalidintvalue(getlong(场)、场);}把新的unsupportedtemporaltypeexception(“无效”+场+“+ get()方法,使用getlong()相反”);
field
-领域有,不空
DateTimeException
如果字段的值是不能获得或值不在字段的有效值范围内
UnsupportedTemporalTypeException
-如果字段不支持或值的范围超过一个
int
ArithmeticException
如果数值溢出时
long getLong(TemporalField field)
long
指定的字段的值。
此查询指定字段的值的日期时间。返回的值可能是字段的有效值范围以外的。如果日期时间不能返回值,因为字段不支持或其他原因,将引发异常。
ChronoField
定义的所有领域。如果字段被支持,则字段的值必须返回。如果不支持,那么
UnsupportedTemporalTypeException
必须扔。
如果该字段是不是ChronoField
,然后通过调用作为参数传递this
TemporalField.getFrom(TemporalAccessor)
得到此方法的结果。
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
field
-领域有,不空
DateTimeException
如果不能得到一个价值领域
UnsupportedTemporalTypeException
如果字段不支持
ArithmeticException
如果数值溢出时
default <R> R query(TemporalQuery<R> query)
此查询使用指定的查询策略对象使用此日期时间。
查询是从日期时间提取信息的一个关键工具。他们的存在使得查询过程,允许不同的方法,根据策略设计模式。例子可能是一个查询,检查日期是否是在2月29日之前的一天,或计算的天数到你的下一个生日。
最常见的查询实现方法的引用,如LocalDate::from
和ZoneId::from
。附加的实现提供了对TemporalQuery
静态方法。
如果(查询= = temporalqueries zoneid() | |。查询= = temporalqueries。chronology() | |查询= = temporalqueries。precision()){返回null;}返回查询。queryfrom(本);未来版本允许添加进一步的查询语句。
都实现了这个接口的类并重写此方法必须调用TemporalAccessor.super.query(query)
。JDK类可以避免调用超如果他们提供的行为等同于违约行为,而非JDK类不能利用这种优化必须super
。
如果实现可以为默认实现的“如果”语句中的查询提供一个值,那么它必须这样做。例如,一个应用程序定义的HourMin
类存储的小时和分钟必须重写此方法如下:
如果(查询= = temporalqueries。precision()){返回分钟;}返回temporalaccessor。超级查询(查询);
实现必须确保在调用此只读方法时,没有可观察到的状态发生改变。
R
-结果的类型
query
-调用查询,不空
DateTimeException
如果无法查询
ArithmeticException
如果数值溢出时
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.