- java.lang.Object
-
- java.time.temporal.TemporalQueries
-
public final class TemporalQueries extends Object
TemporalQuery
常见实现。此类提供
TemporalQuery
的常见实现。 这里定义它们必须是常量,lambda的定义并不能保证。 通过在这里分配一次,它们就变成了“普通的”Java常量。查询是从临时对象中提取信息的关键工具。 它们的存在是为了使查询过程外化,允许根据策略设计模式采用不同的方法。 示例可能是查询日期是否是闰年2月29日前一天的查询,或计算下一个生日的天数。
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
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 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- 结果
- 一个查询,可以获取temporal的区域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
。 该方法等效于此查询,但如果无法获得年表,则会抛出异常。- 结果
- 一个查询,可以获取时间的年表,而不是空
-
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
- 结果
- 一个可以获取temporal的精度而不是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
将返回相同的结果。 如果temporal对象不包含偏移量,则方法引用将抛出异常,而此查询将返回null。- 结果
- 可以获取temporal的偏移量的查询,而不是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的查询LocalTime
。这将返回
TemporalQuery
,可用于查询本地时间的临时对象。 如果临时对象无法提供本地时间,则查询将返回null。查询实现检查
NANO_OF_DAY
字段并使用它创建LocalTime
。该方法
ZoneOffset.from(TemporalAccessor)
可以用作一个TemporalQuery
经由方法参考,LocalTime::from
。 如果时态对象包含时间,则此查询和LocalTime::from
将返回相同的结果。 如果临时对象不包含时间,则方法引用将抛出异常,而此查询将返回null。- 结果
- 一个可以获取时间的查询,而不是null
-
-