模块  java.base
软件包  java.time.temporal

Class 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::fromZoneId::from 提供其他常见查询以返回:

    • 年表,
    • 一个LocalDate,
    • 一个LocalTime,
    • 一个ZoneOffset,
    • 精确,
    • 一个区域,或
    • zoneId。
    从以下版本开始:
    1.8
    • 方法详细信息

      • 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返回null IsoChronology.INSTANCE
        ZoneOffset返回null(不代表日期)
        Instant返回null(不表示日期)

        该方法Chronology.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, Chronology::from 该方法等效于此查询,但如果无法获得年表,则会抛出异常。

        结果
        一个查询,可以获取时间的年表,而不是空
      • precision

        public static TemporalQuery<TemporalUnit> precision()
        查询支持的最小单位。

        这将查询TemporalAccessor的时间精度。 如果目标TemporalAccessor表示一致或完整的日期时间,日期或时间,则必须返回实际支持的最小精度。 请注意, NANO_OF_DAYNANO_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