- 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(),因为此查询过于严格。执行
TemporalAccessorJDK课程的结果如下:
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。执行
TemporalAccessorJDK课程的结果如下:
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的精度。执行
TemporalAccessorJDK课程的结果如下:
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
-
-