- java.lang.Object
-
- java.time.temporal.TemporalQueries
-
public final class TemporalQueries extends Object
通用实现TemporalQuery
。这个类提供了
TemporalQuery
的常见实现。 这些定义在这里,因为它们必须是常量,并且lambdas的定义不能保证。 通过在这里分配一次,它们将成为“常规”Java常量。查询是从时间对象提取信息的关键工具。 它们存在于外部化查询过程,根据策略设计模式允许不同的方法。 示例可能是一个查询,检查日期是闰年前的二月二十九日前一天,还是计算下一个生日的天数。
TemporalField
接口提供了另一种查询时间对象的机制。 该接口限于返回long
。 相比之下,查询可以返回任何类型。有两种等效的方式使用
TemporalQuery
。 第一个是直接在这个接口上调用方法。 二是使用TemporalAccessor.query(TemporalQuery)
:// these two lines are equivalent, but the second approach is recommended temporal = thisQuery.queryFrom(temporal); temporal = temporal.query(thisQuery);
建议使用第二种方法,query(TemporalQuery)
,因为在代码中阅读更清楚。最常见的实现是方法引用,例如
LocalDate::from
和ZoneId::from
。 提供其他常见查询以返回:- 一个年表,
- 一个LocalDate,
- 一个LocalTime,
- 一个ZoneOffset,
- 精度,
- 一个区域,或
- 一个zoneId。
- 从以下版本开始:
- 1.8
-
-
方法摘要
所有方法 静态方法 具体的方法 Modifier and Type 方法 描述 static TemporalQuery<Chronology>
chronology()
查询Chronology
。static TemporalQuery<LocalDate>
localDate()
对于LocalDate
的查询,如果找不到则返回null。static TemporalQuery<LocalTime>
localTime()
对于LocalTime
的查询,如果找不到则返回null。static TemporalQuery<ZoneOffset>
offset()
对于ZoneOffset
的查询,如果找不到则返回null。static TemporalQuery<TemporalUnit>
precision()
对最小支持单位的查询。static TemporalQuery<ZoneId>
zone()
对ZoneId
宽松查询,回落到ZoneOffset
。static TemporalQuery<ZoneId>
zoneId()
严格查询ZoneId
。
-
-
-
方法详细信息
-
zoneId
public static TemporalQuery<ZoneId> zoneId()
严格查询ZoneId
。这可以查询
TemporalAccessor
的区域。 如果日期时间概念上包含ZoneId
则该区域仅返回。 如果日期时间仅在概念上具有ZoneOffset
,则不会返回。 因此,一个ZonedDateTime
将返回结果getZone()
,而是OffsetDateTime
将返回null。在大多数情况下,应用程序应使用
zone()
,因为此查询过于严格。执行
TemporalAccessor
JDK课程的结果如下:
LocalDate
返回null
LocalTime
返回null
LocalDateTime
返回null
ZonedDateTime
返回相关联的区域
OffsetTime
返回null
OffsetDateTime
返回null
ChronoLocalDate
返回null
ChronoLocalDateTime
返回null
ChronoZonedDateTime
返回相关联的区域
Era
返回null
DayOfWeek
返回null
Month
返回null
Year
返回null
YearMonth
返回null
MonthDay
返回null
ZoneOffset
返回null
Instant
返回null- 结果
- 一个可以获得时间的区域ID的查询,而不是null
-
chronology
public static TemporalQuery<Chronology> chronology()
查询Chronology
。这将查询
TemporalAccessor
的年表。 如果目标TemporalAccessor
表示日期或日期的一部分,则应返回表示日期的年表。作为此定义的结果,仅表示时间的对象(如LocalTime
)将返回null。执行
TemporalAccessor
JDK课程的结果如下:
LocalDate
返回IsoChronology.INSTANCE
LocalTime
返回null(不表示日期)
LocalDateTime
返回IsoChronology.INSTANCE
ZonedDateTime
返回IsoChronology.INSTANCE
OffsetTime
返回null(不表示日期)
OffsetDateTime
返回IsoChronology.INSTANCE
ChronoLocalDate
返回相关的年表
ChronoLocalDateTime
返回相关的年表
ChronoZonedDateTime
返回相关的年表
Era
返回相关的年表
DayOfWeek
返回null(按时间顺序共享)
Month
返回IsoChronology.INSTANCE
Year
返回IsoChronology.INSTANCE
YearMonth
返回IsoChronology.INSTANCE
MonthDay
返回nullIsoChronology.INSTANCE
ZoneOffset
返回null(不表示日期)
Instant
返回null(不表示日期)该方法
Chronology.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,Chronology::from
。 该方法相当于此查询,但如果无法获取年表,则抛出异常。- 结果
- 一个查询,可以获得时间,而不是null的年表
-
precision
public static TemporalQuery<TemporalUnit> precision()
对最小支持单位的查询。这可以查询
TemporalAccessor
的时间精度。 如果目标TemporalAccessor
表示一致或完整的日期时间,日期或时间,则必须返回实际支持的最小精度。 请注意,诸如NANO_OF_DAY
和NANO_OF_SECOND
类的字段被定义为始终返回忽略精度,因此这是找到实际最小支持单元的唯一方法。 例如,GregorianCalendar
要实现TemporalAccessor
它会返回MILLIS
的精度。执行
TemporalAccessor
JDK课程的结果如下:
LocalDate
返回DAYS
LocalTime
返回NANOS
LocalDateTime
返回NANOS
ZonedDateTime
返回NANOS
OffsetTime
返回NANOS
OffsetDateTime
返回NANOS
ChronoLocalDate
返回DAYS
ChronoLocalDateTime
返回NANOS
ChronoZonedDateTime
返回NANOS
Era
返回ERAS
DayOfWeek
返回DAYS
Month
返回MONTHS
Year
返回YEARS
YearMonth
返回MONTHS
MonthDay
返回null(不代表完整的日期或时间)
ZoneOffset
返回null(不表示日期或时间)
Instant
返回NANOS
- 结果
- 一个可以获得时间的精度的查询,而不是null
-
zone
public static TemporalQuery<ZoneId> zone()
一个宽松的查询为ZoneId
,回落到ZoneOffset
。这将查询一个
TemporalAccessor
的区域。 它首先尝试获得该区域,使用zoneId()
。 如果没有找到它,它会尝试获取offset()
。 因此,一个ZonedDateTime
将返回的结果getZone()
,而一个OffsetDateTime
将返回的结果getOffset()
。在大多数情况下,应用程序应使用此查询而不是
#zoneId()
。该方法
ZoneId.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,ZoneId::from
。 该方法相当于此查询,但如果无法获取区域,则抛出异常。- 结果
- 一个可以获取时间的区域ID或偏移的查询,而不是null
-
offset
public static TemporalQuery<ZoneOffset> offset()
对于ZoneOffset
的查询,如果找不到,返回null。这将返回一个
TemporalQuery
,可用于查询偏移量的时间对象。 如果时间对象不能提供偏移量,查询将返回null。查询实现检查
OFFSET_SECONDS
字段并使用它来创建一个ZoneOffset
。该方法
ZoneOffset.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,ZoneOffset::from
。 如果时间对象包含一个偏移量,这个查询和ZoneOffset::from
将返回相同的结果。 如果时间对象不包含偏移量,则方法引用将抛出异常,而此查询将返回null。- 结果
- 一个可以获得时间偏移的查询,而不是null
-
localDate
public static TemporalQuery<LocalDate> localDate()
对于LocalDate
的查询,如果找不到则返回null。这将返回一个
TemporalQuery
,可用于查询本地日期的时间对象。 如果时间对象不能提供本地日期,查询将返回null。查询实现检查
EPOCH_DAY
字段,并使用它来创建一个LocalDate
。该方法
ZoneOffset.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,LocalDate::from
。 该查询和LocalDate::from
将返回相同的结果,如果时间对象包含一个日期。 如果时间对象不包含日期,则方法引用将抛出异常,而此查询将返回null。- 结果
- 一个查询可以获取时间的日期,而不是null
-
localTime
public static TemporalQuery<LocalTime> localTime()
对于LocalTime
的查询,如果找不到则返回null。这将返回一个可用于查询本地时间的时间对象的
TemporalQuery
。 如果时间对象不能提供本地时间,查询将返回null。查询实现检查
NANO_OF_DAY
字段并使用它来创建一个LocalTime
。该方法
ZoneOffset.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,LocalTime::from
。 该查询和LocalTime::from
将返回相同的结果,如果时间对象包含一个时间。 如果时间对象不包含时间,则方法引用将抛出异常,而此查询将返回null。- 结果
- 一个可以获得时间的查询,而不是null
-
-