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 。 提供其他常见查询以返回:
| Modifier and Type | Method and Description |
|---|---|
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 。
|
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
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返回null IsoChronology.INSTANCE
ZoneOffset返回null(不表示日期)
Instant返回null(不表示日期)
该方法Chronology.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, Chronology::from 。 该方法相当于此查询,但如果无法获取年表,则抛出异常。
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
public static TemporalQuery<ZoneId> zone()
ZoneId宽松查询,回落到ZoneOffset 。
这将查询TemporalAccessor的区域。 它首先尝试获得该区域,使用zoneId() 。 如果没有找到它,它会尝试获取offset() 。 因此,一个ZonedDateTime将返回的结果getZone() ,而一个OffsetDateTime将返回的结果getOffset() 。
在大多数情况下,应用程序应使用此查询而不是#zoneId() 。
该方法ZoneId.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, ZoneId::from 。 该方法相当于此查询,但如果无法获取区域,则抛出异常。
public static TemporalQuery<ZoneOffset> offset()
ZoneOffset的查询如果找不到则返回null。
这将返回一个TemporalQuery ,可用于查询偏移量的时间对象。 如果时间对象不能提供偏移量,查询将返回null。
查询实现检查OFFSET_SECONDS字段并使用它来创建一个ZoneOffset 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, ZoneOffset::from 。 如果该时间对象包含一个偏移量,该查询和ZoneOffset::from将返回相同的结果。 如果时间对象不包含偏移量,则方法引用将抛出异常,而此查询将返回null。
public static TemporalQuery<LocalDate> localDate()
LocalDate的查询返回null如果没有找到。
这将返回一个TemporalQuery ,可用于查询本地日期的时间对象。 如果时间对象不能提供本地日期,查询将返回null。
查询实现检查EPOCH_DAY字段并使用它来创建一个LocalDate 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, LocalDate::from 。 如果时间对象包含日期,则该查询和LocalDate::from将返回相同的结果。 如果时间对象不包含日期,则方法引用将抛出异常,而此查询将返回null。
public static TemporalQuery<LocalTime> localTime()
LocalTime的查询如果找不到则返回null。
这将返回一个TemporalQuery ,可用于查询本地时间的时间对象。 如果时间对象不能提供本地时间,查询将返回null。
查询实现检查NANO_OF_DAY字段并使用它来创建一个LocalTime 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, LocalTime::from 。 如果时间对象包含时间,则此查询和LocalTime::from将返回相同的结果。 如果时间对象不包含时间,则方法引用将抛出异常,而此查询将返回null。
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.