Module  java.base
软件包  java.time.temporal

Class TemporalQueries



  • 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::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

        结果
        一个可以获得时间的区域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 该方法相当于此查询,但如果无法获取年表,则抛出异常。

        结果
        一个查询,可以获得时间,而不是null的年表
      • 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

        结果
        一个可以获得时间的精度的查询,而不是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将返回相同的结果。 如果时间对象不包含偏移量,则方法引用将抛出异常,而此查询将返回null。

        结果
        一个可以获得时间偏移的查询,而不是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。

        这将返回一个可用于查询本地时间的时间对象的TemporalQuery 如果时间对象不能提供本地时间,查询将返回null。

        查询实现检查NANO_OF_DAY字段并使用它来创建一个LocalTime

        该方法ZoneOffset.from(TemporalAccessor)可以用作一个TemporalQuery经由方法参考, LocalTime::from 该查询和LocalTime::from将返回相同的结果,如果时间对象包含一个时间。 如果时间对象不包含时间,则方法引用将抛出异常,而此查询将返回null。

        结果
        一个可以获得时间的查询,而不是null