java temporal,java11教程--类TemporalQueries用法

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 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值