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

Interface TemporalAccessor

    • 方法详细信息

      • isSupported

        boolean isSupported​(TemporalField field)
        检查是否支持指定的字段。

        这将检查是否可以查询指定字段的日期时间。 如果为false,则调用rangeget方法将引发异常。

        实现要求:
        实现必须检查并处理ChronoField定义的所有字段。 如果支持该字段,则必须返回true,否则必须返回false。

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数。

        实现必须确保在调用此只读方法时不会更改任何可观察状态。

        参数
        字段 - 要检查的字段,null返回false
        结果
        如果可以为该字段查询此日期时间,则返回true,否则返回false
      • range

        default ValueRange range​(TemporalField field)
        获取指定字段的有效值范围。

        所有字段都可以表示为long整数。 此方法返回描述该值的有效范围的对象。 此时间对象的值用于增强返回范围的准确性。 如果日期时间无法返回范围,因为该字段不受支持或由于某些其他原因,将引发异常。

        请注意,结果仅描述了最小和最大有效值,重要的是不要过多地阅读它们。 例如,该范围内的值可能对该字段无效。

        实现要求:
        实现必须检查并处理ChronoField定义的所有字段。 如果支持该字段,则必须返回该字段的范围。 如果不受支持,则必须抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.rangeRefinedBy(TemporalAccessorl)传递this作为参数。

        实现必须确保在调用此只读方法时不会更改任何可观察状态。

        默认实现必须与此代码等效:

          if (field instanceof ChronoField) {    if (isSupported(field)) {      return field.range();    }    throw new UnsupportedTemporalTypeException("Unsupported field: " + field);  }  return field.rangeRefinedBy(this); 
        参数
        字段 - 要查询范围的字段,而不是null
        结果
        字段的有效值范围,不为null
        异常
        DateTimeException - 如果无法获得该字段的范围
        UnsupportedTemporalTypeException - 如果不支持该字段
      • get

        default int get​(TemporalField field)
        获取指定字段的int

        这将查询指定字段值的日期时间。 返回的值将始终在该字段的有效值范围内。 如果日期时间无法返回该值,因为该字段不受支持或由于某些其他原因,将引发异常。

        实现要求:
        实现必须检查并处理ChronoField定义的所有字段。 如果该字段受支持并且具有int范围,则必须返回该字段的值。 如果不受支持,则必须抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。

        实现必须确保在调用此只读方法时不会更改任何可观察状态。

        默认实现必须与此代码等效:

          if (range(field).isIntValue()) {    return range(field).checkValidIntValue(getLong(field), field);  }  throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead"); 
        参数
        字段 - 要获取的字段,而不是null
        结果
        字段的值,在有效的值范围内
        异常
        DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围
        UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过 int
        ArithmeticException - 如果发生数字溢出
      • getLong

        long getLong​(TemporalField field)
        获取指定字段的long

        这将查询指定字段值的日期时间。 返回的值可能超出字段的有效值范围。 如果日期时间无法返回该值,因为该字段不受支持或由于某些其他原因,将引发异常。

        实现要求:
        实现必须检查并处理ChronoField定义的所有字段。 如果支持该字段,则必须返回该字段的值。 如果不受支持,则必须抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。

        实现必须确保在调用此只读方法时不会更改任何可观察状态。

        参数
        字段 - 要获取的字段,而不是null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获得该字段的值
        UnsupportedTemporalTypeException - 如果不支持该字段
        ArithmeticException - 如果发生数字溢出
      • query

        default <R> R query​(TemporalQuery<R> query)
        查询此日期时间。

        这将使用指定的查询策略对象查询此日期时间。

        查询是从日期时间提取信息的关键工具。 它们的存在是为了使查询过程外化,允许根据策略设计模式采用不同的方法。 示例可能是查询日期是否是闰年2月29日前一天的查询,或计算下一个生日的天数。

        最常见的查询实现是方法引用,例如LocalDate::fromZoneId::from 其他实现在TemporalQuery上作为静态方法提供。

        实现要求:
        默认实现必须与此代码等效:
          if (query == TemporalQueries.zoneId() ||        query == TemporalQueries.chronology() || query == TemporalQueries.precision()) {    return null;  }  return query.queryFrom(this); 
        允许将来的版本向if语句添加更多查询。

        实现此接口并重写此方法的所有类都必须调用TemporalAccessor.super.query(query) 如果JDK类提供的行为等同于默认行为,则可以避免调用super,但是非JDK类可能不会使用此优化,必须调用super

        如果实现可以为默认实现的if语句中列出的查询之一提供值,则必须执行此操作。 例如,应用程序定义的HourMin类存储小时和分钟必须覆盖此方法,如下所示:

          if (query == TemporalQueries.precision()) {    return MINUTES;  }  return TemporalAccessor.super.query(query); 

        实现必须确保在调用此只读方法时不会更改任何可观察状态。

        参数类型
        R - 结果的类型
        参数
        query - 要调用的查询,而不是null
        结果
        查询结果,可以返回null(由查询定义)
        异常
        DateTimeException - 如果无法查询
        ArithmeticException - 如果发生数字溢出