TemporalQuery常见实现。
这里定义它们必须是常量,lambda的定义并不能保证。 通过在这里分配一次,它们就变成了“普通的”Java常量。
查询是从临时对象中提取信息的关键工具。 它们的存在是为了使查询过程外化,允许根据策略设计模式采用不同的方法。 示例可能是查询日期是否是闰年2月29日前一天的查询,或计算下一个生日的天数。
TemporalField接口提供了另一种查询时态对象的机制。 该界面仅限于返回long 。 相比之下,查询可以返回任何类型。
有两种使用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。
查询
Chronology 。
查询
LocalDate如果找不到则返回null。
查询
LocalTime如果找不到则返回null。
查询
ZoneOffset如果找不到则返回null。
查询支持的最小单位。
一个宽松的查询
ZoneId ,回落到
ZoneOffset 。
严格查询
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
查询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 。 该方法等效于此查询,但如果无法获得年表,则会抛出异常。
查询支持的最小单位。
这将查询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
一个宽松的查询ZoneId ,回落到ZoneOffset 。
这将查询区域的TemporalAccessor 。 它首先尝试使用zoneId()获取区域。 如果没有找到它,它会尝试获取offset() 。 因此,一个ZonedDateTime将返回的结果getZone() ,而一个OffsetDateTime将返回的结果getOffset() 。
在大多数情况下,应用程序应使用此查询而不是#zoneId() 。
该方法ZoneId.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, ZoneId::from 。 该方法等效于此查询,但如果无法获取区域,则抛出异常。
查询ZoneOffset如果未找到则返回null。
这将返回TemporalQuery ,可用于查询时间对象的偏移量。 如果临时对象无法提供偏移量,则查询将返回null。
查询实现检查OFFSET_SECONDS字段并使用它创建ZoneOffset 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, ZoneOffset::from 。 如果时态对象包含偏移量,则此查询和ZoneOffset::from将返回相同的结果。 如果temporal对象不包含偏移量,则方法引用将抛出异常,而此查询将返回null。
查询LocalDate如果未找到则返回null。
这将返回TemporalQuery ,可用于查询本地日期的临时对象。 如果临时对象无法提供本地日期,则查询将返回null。
查询实现检查EPOCH_DAY字段并使用它创建LocalDate 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, LocalDate::from 。 如果临时对象包含日期,则此查询和LocalDate::from将返回相同的结果。 如果临时对象不包含日期,则方法引用将抛出异常,而此查询将返回null。
如果找不到, LocalTime返回null的查询LocalTime 。
这将返回TemporalQuery ,可用于查询本地时间的临时对象。 如果临时对象无法提供本地时间,则查询将返回null。
查询实现检查NANO_OF_DAY字段并使用它创建LocalTime 。
该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, LocalTime::from 。 如果时态对象包含时间,则此查询和LocalTime::from将返回相同的结果。 如果临时对象不包含时间,则方法引用将抛出异常,而此查询将返回null。
变量和类型
方法
描述
查询
LocalDate如果找不到则返回null。
查询
LocalTime如果找不到则返回null。
查询
ZoneOffset如果找不到则返回null。
一个宽松的查询
ZoneId ,回落到
ZoneOffset 。