-
- 所有已知实现类:
-
ChronoField
public interface TemporalField
日期时间的字段,如月份或小时。日期和时间使用将时间线划分成对人有意义的东西的字段来表示。 此接口的实现表示这些字段。
最常用的单位在
ChronoField
中定义。 此外字段在供给IsoFields
,WeekFields
和JulianFields
。 字段也可以通过实现该接口的应用程序代码编写。该领域使用双重调度工作。 客户端代码调用日期时间的方法,如
LocalDateTime
,检查该字段是否为ChronoField
。 如果是,则日期时间必须处理它。 否则,方法调用将重新分配到此接口中的匹配方法。- 实现要求:
-
该接口必须小心实施,以确保其他类正确运行。
可以实例化的所有实现必须是最终的,不可变的和线程安全的。
如果可能的话应该是
Serializable
。 枚举是有效的实施选择。 - 从以下版本开始:
- 1.8
-
-
方法摘要
所有方法 接口方法 抽象方法 Default Methods Modifier and Type 方法 描述 <R extends Temporal>
RadjustInto(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()
获取字段的描述性名称。
-
-
-
方法详细信息
-
getDisplayName
default String getDisplayName(Locale locale)
获取所请求语言环境中字段的显示名称。如果区域设置没有显示名称,则必须返回合适的默认值。
默认实现必须检查区域设置不为null并返回
toString()
。- 参数
-
locale
- 要使用的语言环境,不为空 - 结果
- 区域设置的显示名称或合适的默认值,不为空
-
getBaseUnit
TemporalUnit getBaseUnit()
获取测量场的单位。字段的单位是在该范围内变化的周期。 例如,在“MonthOfYear”字段中,单位为“Months”。 参见
getRangeUnit()
。- 结果
- 定义字段的基本单位的单位不为空
-
getRangeUnit
TemporalUnit getRangeUnit()
获取字段绑定的范围。字段的范围是字段在内部变化的周期。 例如,在“MonthOfYear”字段中,范围是“年”。 参见
getBaseUnit()
。范围从不为空。 例如,'Year'字段是'YearOfForever'的缩写。 因此,它具有“年”和“永远”的单位。
- 结果
- 定义字段范围的单位,不为空
-
range
ValueRange range()
获取字段的有效值的范围。所有字段可以表示为
long
整数。 此方法返回描述该值的有效范围的对象。 该方法一般仅适用于ISO-8601日历系统。请注意,结果仅描述最小和最大有效值,重要的是不要太多读取它们。 例如,可以在该范围内的值对该字段无效。
- 结果
- 字段的有效值的范围不为null
-
isDateBased
boolean isDateBased()
检查此字段是否表示日期的组件。一个字段是基于日期的,如果它可以从
EPOCH_DAY
派生。 请注意,对于isDateBased()
和isTimeBased()
可以返回false,例如,当表示像星期几这样的字段时。- 结果
- 如果此字段是日期的组成部分,则为true
-
isTimeBased
boolean isTimeBased()
检查此字段是否表示时间的一个组成部分。一个字段是基于时间的,如果它可以从
NANO_OF_DAY
派生。 请注意,对于isDateBased()
和isTimeBased()
可以返回false,例如表示像星期几这样的字段时。- 结果
- 如果此字段是时间的一个组成部分,则为true
-
isSupportedBy
boolean isSupportedBy(TemporalAccessor temporal)
检查时间对象是否支持该字段。这决定了临时访问者是否支持该字段。 如果这返回false,则不能查询该字段的时间。
使用这种方法有两种等效的方法。 第一个是直接调用这个方法。 二是使用
TemporalAccessor.isSupported(TemporalField)
:// these two lines are equivalent, but the second approach is recommended temporal = thisField.isSupportedBy(temporal); temporal = temporal.isSupported(thisField);
建议使用第二种方法,isSupported(TemporalField)
,因为在代码中阅读更清楚。实施应确定是否支持使用
ChronoField
中可用的字段。- 参数
-
temporal
- 要查询的时间对象,不为空 - 结果
- 如果可以查询此字段的日期时间,则为true,否则为false
-
rangeRefinedBy
ValueRange rangeRefinedBy(TemporalAccessor temporal)
使用时间对象获取此字段的有效值的范围以优化结果。这使用时间对象来查找该字段的有效值的范围。 这类似于
range()
,但是这种方法使用时间来优化结果。 例如,如果字段是DAY_OF_MONTH
则range
方法不准确,因为有四个可能的月份长度,range
和31天。 使用此方法与日期允许范围准确,只返回这四个选项之一。使用这种方法有两种等效的方法。 第一个是直接调用这个方法。 二是使用
TemporalAccessor.range(TemporalField)
:// these two lines are equivalent, but the second approach is recommended temporal = thisField.rangeRefinedBy(temporal); temporal = temporal.range(thisField);
建议使用第二种方法,range(TemporalField)
,因为在代码中阅读更清楚。实施应使用
ChronoField
中可用的字段执行任何查询或计算。 如果不支持该字段,则必须抛出UnsupportedTemporalTypeException
。- 参数
-
temporal
- 用于细化结果的时间对象,不为null - 结果
- 该字段的有效值的范围不为null
- 异常
-
DateTimeException
- 如果无法获取字段的范围 -
UnsupportedTemporalTypeException
- 如果字段不受时间支持
-
getFrom
long getFrom(TemporalAccessor temporal)
从指定的时间对象获取此字段的值。这将查询该时间对象的该字段的值。
使用这种方法有两种等效的方法。 第一个是直接调用这个方法。 二是使用
TemporalAccessor.getLong(TemporalField)
(或TemporalAccessor.get(TemporalField)
):// these two lines are equivalent, but the second approach is recommended temporal = thisField.getFrom(temporal); temporal = temporal.getLong(thisField);
建议使用第二种方法,getLong(TemporalField)
,因为在代码中阅读更清楚。实施应使用
ChronoField
中的字段执行任何查询或计算。 如果不支持该字段,则必须抛出UnsupportedTemporalTypeException
。- 参数
-
temporal
- 要查询的时间对象,不为空 - 结果
- 该字段的值不为null
- 异常
-
DateTimeException
- 如果无法获取字段的值 -
UnsupportedTemporalTypeException
- 如果字段不受时间支持 -
ArithmeticException
- 如果发生数字溢出
-
adjustInto
<R extends Temporal> R adjustInto(R temporal, long newValue)
返回指定时间对象的副本,并设置该字段的值。这将返回一个新的时间对象,该对象基于指定的时间对象,该字段的值已更改。 例如,在
LocalDate
,这可以用于设置年,月或月的日期。 返回的对象具有与指定对象相同的可观察类型。在某些情况下,更改字段尚未完全定义。 例如,如果目标对象是代表1月31日的日期,则将月份更改为2月份将不清楚。 在这种情况下,实施负责解决结果。 通常,它将选择先前的有效日期,这将是本例中最后一个有效的二月份。
使用这种方法有两种等效的方法。 第一个是直接调用这个方法。 二是使用
Temporal.with(TemporalField, long)
:// these two lines are equivalent, but the second approach is recommended temporal = thisField.adjustInto(temporal); temporal = temporal.with(thisField);
建议使用第二种方法,with(TemporalField)
,因为在代码中阅读更清楚。实施应使用
ChronoField
中可用的字段执行任何查询或计算。 如果不支持该字段,则必须抛出UnsupportedTemporalTypeException
。实现不能改变指定的时间对象。 相反,必须退还原件的调整副本。 这为不可变和可变的实现提供了相当的安全行为。
- 参数类型
-
R
- 时间对象的类型 - 参数
-
temporal
- 要调整的时间对象,不为空 -
newValue
- 该字段的新值 - 结果
- 调整后的时间对象,不为空
- 异常
-
DateTimeException
- 如果该字段无法设置 -
UnsupportedTemporalTypeException
- 如果字段不受时间支持 -
ArithmeticException
- 如果发生数字溢出
-
resolve
default TemporalAccessor resolve(Map<TemporalField,Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
解决此字段以提供更简单的替代或日期。在解析的解析阶段调用此方法。 它旨在允许将应用程序定义的字段简化为更标准的字段,例如
ChronoField
或更多的日期。应用程序通常不应直接调用此方法。
- 实现要求:
-
如果一个实现表示一个可以被简化或与其他组合的字段,则必须实现该方法。
指定的映射包含解析的当前状态。 该地图是可变的,必须进行突变才能解析字段和任何相关字段。 如果地图包含此字段,则此方法仅在解析期间被调用,因此实现应该假定该字段存在。
解析字段将包括查看此字段的值,以及潜在的其他字段,并使用更简单的值(例如
ChronoField
更新映射,或返回完整的ChronoLocalDate
。 如果解决方案成功,代码必须从地图中删除已解决的所有字段,包括此字段。例如,
IsoFields
类包含四分之一和四分之一的字段。 该方法在该类中的实现将两个字段加上YEAR
,成为一个完整的LocalDate
。 解决方法将在返回LocalDate
之前从地图中删除所有三个字段。使用部分完整的时间来允许查询年表和区域。 一般来说,只需要年表。 查询除区域或年表之外的项目未定义,不得依赖。 的其他方法,如行为
get
,getLong
,range
和isSupported
是不可预测的,结果不确定。如果解决方案是可行的,但数据无效,则应使用解析器样式来确定适当的宽大级别,这可能需要抛出
DateTimeException
或ArithmeticException
。 如果无法解析,则resolve方法必须返回null。当解析时间字段时,映射将被更改并返回null。 当解析日期字段时,通常从方法返回日期,并更改映射以删除已解析的字段。 但是,将日期字段解析成可以生成日期的其他
ChronoField
实例也是可以接受的,例如EPOCH_DAY
。并非所有
TemporalAccessor
实现都被接受为返回值。 调用此方法的实现必须接受ChronoLocalDate
,ChronoLocalDateTime
,ChronoZonedDateTime
和LocalTime
。默认实现必须返回null。
- 参数
-
fieldValues
- 可以更新的字段映射到值,不为null -
partialTemporal
- 部分完整的时间来查询区域和年表; 查询其他事项是未定义的,不推荐,不为null -
resolverStyle
- 请求的解析类型,不为null - 结果
- 解决的时间对象; null如果解析只改变了地图,或者没有解决
- 异常
-
ArithmeticException
- 如果发生数字溢出 -
DateTimeException
- 如果解决导致错误。 在不首先检查是否支持的情况下,通过查询时间上的字段不能抛出此异常
-
-