public interface TemporalField
日期和时间是使用将时间线划分为人类有意义的东西的领域表达出来的。此接口的实现表示这些字段。
最常用的单位是指在ChronoField
。进一步的领域提供IsoFields
,WeekFields
和JulianFields
。领域也可由应用程序代码通过实现这个接口。
使用双调度的现场工作。客户端代码调用一个日期时间像LocalDateTime
检查方法如果字段是ChronoField
。如果是的话,那么日期时间必须处理它。否则,该方法调用将被重新发送到该接口中的匹配方法中。
Serializable
。枚举是有效实现选择。
Modifier and Type | Method and Description |
---|---|
<R extends Temporal> |
adjustInto(R temporal, long newValue)
返回一个指定的时间对象的副本,此字段集的值为。
|
TemporalUnit |
getBaseUnit()
获取字段的单位,该字段在。
|
default String |
getDisplayName(Locale locale)
获取所请求的区域设置中的字段的显示名称。
|
long |
getFrom(TemporalAccessor temporal)
从指定的时间对象中获取此字段的值。
|
TemporalUnit |
getRangeUnit()
获取字段所绑定的范围。
|
boolean |
isDateBased()
检查此字段是否代表日期的一个组件。
|
boolean |
isSupportedBy(TemporalAccessor temporal)
检查此字段是否被时间对象支持。
|
boolean |
isTimeBased()
检查此字段是否表示时间的一个组件。
|
ValueRange |
range()
获取字段的有效值的范围。
|
ValueRange |
rangeRefinedBy(TemporalAccessor temporal)
获取此字段的有效值的范围,使用时间对象来细化结果。
|
default TemporalAccessor |
resolve(Map<TemporalField,Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
解析此字段提供一个更简单的替代或日期。
|
String |
toString()
获取字段的描述性名称。
|
default String getDisplayName(Locale locale)
如果没有区域设置的显示名称,则必须返回一个合适的默认值。
默认的实现必须现场检查不空回toString()
。
locale
-现场使用,不为空
TemporalUnit getBaseUnit()
该字段的单位是在范围内变化的期间。例如,在该领域monthofyear”,单位是“月”。又见getRangeUnit()
。
TemporalUnit getRangeUnit()
字段的范围是字段在不同的范围内变化的周期。例如,在该领域monthofyear '范围'年'。又见getBaseUnit()
。
该范围是永远不会空。例如,“年”字段是“yearofforever的速记。因此,它有一个单位的“年”和一系列的“永远”。
ValueRange range()
所有字段可以表示为一个long
整数。此方法返回一个对象,该对象描述该值的有效范围。这种方法通常只适用于ISO-8601日历系统。
请注意,结果只描述了最小值和最大值的有效值,重要的是不要对它们进行太多的阅读。例如,可能在字段无效的范围内的值。
boolean isDateBased()
一场为基础,如果它可以来自EPOCH_DAY
日期。请注意,对于isDateBased()
和isTimeBased()
返回错误它是有效的,如当表示喜欢分钟周场。
boolean isTimeBased()
一场时间如果可以来自NANO_OF_DAY
。请注意,对于isDateBased()
和isTimeBased()
返回错误它是有效的,如当表示喜欢分钟周场。
boolean isSupportedBy(TemporalAccessor temporal)
这一决定的时间访问支持这场。如果这个返回假,时间不能被查询此字段。
使用这种方法有两个等效的方法。首先是直接调用这个方法。二是用TemporalAccessor.isSupported(TemporalField)
:
这两条线是等价的,但第二种方法是建议时间=系统issupportedby(时间);时间=时间”(研究);建议使用第二种方法,
isSupported(TemporalField)
,因为它是一个更清晰的读码。
实现应该确定他们是否在ChronoField
使用领域提供支持。
temporal
-查询时间的对象,不为空
ValueRange rangeRefinedBy(TemporalAccessor temporal)
这使用时间对象来查找字段的有效值的范围。这是类似于range()
,然而这种方法提炼的结果使用时间。例如,如果该字段是DAY_OF_MONTH
的range
方法不准确,可能有四个月的长度,28、29、30和31天。使用该方法与日期允许范围是准确的,返回的只有一个这四个选项。
使用这种方法有两个等效的方法。首先是直接调用这个方法。二是用TemporalAccessor.range(TemporalField)
:
这两条线是等价的,但第二种方法是建议时间=系统rangerefinedby(时间);时间=时间范围(领域);建议使用第二种方法,
range(TemporalField)
,因为它是一个更清晰的读码。
实现应该执行任何查询或计算字段可在ChronoField
。如果字段不支持UnsupportedTemporalTypeException
必须扔。
temporal
-用于细化结果的时空对象,不为空
DateTimeException
如果不能得到的领域范围
UnsupportedTemporalTypeException
-如果字段不是由颞支
long getFrom(TemporalAccessor temporal)
此查询此字段的值的时间对象。
使用这种方法有两个等效的方法。首先是直接调用这个方法。二是用TemporalAccessor.getLong(TemporalField)
(或TemporalAccessor.get(TemporalField)
):
这两条线是等价的,但第二种方法是建议时间=系统从(时间);时间=时间。getlong(研究);建议使用第二种方法,
getLong(TemporalField)
,因为它是一个更清晰的读码。
实现应该执行任何查询或计算字段可在ChronoField
。如果字段不支持UnsupportedTemporalTypeException
必须扔。
temporal
-查询时间的对象,不为空
DateTimeException
如果不能得到一个价值领域
UnsupportedTemporalTypeException
-如果字段不是由颞支
ArithmeticException
如果数值溢出时
<R extends Temporal> R adjustInto(R temporal, long newValue)
这将返回一个新的基于指定的时间对象,这个字段的值改变了。例如,在一个LocalDate
,这可以用来设置年、月、日月。返回的对象具有相同的可观察的类型作为指定的对象。
在某些情况下,改变一个字段没有完全定义。例如,如果目标对象是代表1月31日的日期,则更改月至二月将不清楚。在这样的情况下,实施是负责解决结果。通常情况下,它会选择以前的有效日期,这将是二月的最后一个有效的一天,在这个例子中。
使用这种方法有两个等效的方法。首先是直接调用这个方法。二是用Temporal.with(TemporalField, long)
:
这两条线是等价的,但第二种方法是建议时间=系统adjustinto(时间);时间=时间,(研究);建议使用第二种方法,
with(TemporalField)
,因为它是一个更清晰的读码。
实现应该执行任何查询或计算字段可在ChronoField
。如果字段不支持UnsupportedTemporalTypeException
必须扔。
实现不能更改指定的时间对象。相反,必须返回原始的调整副本。这提供了等效,为不变的和可变的实现安全的行为。
R
-时空对象的类型
temporal
-调整时间的对象,不为空
newValue
-领域新价值
DateTimeException
-如果该字段不能设置
UnsupportedTemporalTypeException
-如果字段不是由颞支
ArithmeticException
如果数值溢出时
default TemporalAccessor resolve(Map<TemporalField,Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
在解析的解析阶段中调用此方法。它被设计为允许应用程序定义的字段被简化成更标准的领域,如对ChronoField
,或到一个日期。
应用程序通常不直接调用该方法。
指定的映射包含解析的当前状态。Map是可变的和必须解决的领域突变和任何相关的领域。此方法将只在解析过程中被调用,如果Map包含了这个字段,因此实现应该假设这个字段是存在的。
解决一个领域将包括在这一领域的价值,和可能的其他领域,并更新Map的一个简单的值,如ChronoField
,或返回一个完整的ChronoLocalDate
。如果一个解决是成功的,代码必须删除从Map上解析的所有字段,包括这一字段。
例如,在IsoFields
类包含年、日的季度季度领域。在这类解决了两个字段加上YEAR
成一个完整的LocalDate
这个方法的实现。解决方法会返回之前的LocalDate
删除从Map上所有的三个领域。
一个部分完整的时间被用来允许的时间和区域被查询。在一般情况下,只有年代将是必要的。查询区域或时间表以外的项目是未定义的,也不能依赖于。其他的方法如get
,getLong
行为,range
和isSupported
是不可预知的结果未定义。
如果分辨率应该是可能的,但数据是无效的,解析器的风格应该是用来决定宽恕一个适当的水平,这可能需要扔一个DateTimeException
或ArithmeticException
。如果没有解决是可能的,解决方法必须返回null。
当解决时间字段时,Map将被更改,并返回。当解决日期字段时,从方法中返回的日期通常会返回,用映射改变的方法来移除解决的字段。然而,这也将是可被分解成其他ChronoField
实例,可以产生一个日期字段,如EPOCH_DAY
。
不是所有的TemporalAccessor
实现作为返回值。实现,调用这个方法必须接受ChronoLocalDate
,ChronoLocalDateTime
,ChronoZonedDateTime
和LocalTime
。
默认实现必须返回空值。
fieldValues
-字段值的Map,可以更新,不为空
partialTemporal
-部分完成时态查询区和年代学;其他事情查询定义,不推荐,不为空
resolverStyle
-解决请求的类型,不为空
ArithmeticException
如果数值溢出时
DateTimeException
如果解决一个错误的结果。如果支持的是时间上的字段,则不能通过查询字段的时间进行查询
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.