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。