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

Interface TemporalAccessor

    • 方法详细信息

      • isSupported

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

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

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

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

        当这个只读方法被调用时,实现必须确保没有可观察的状态被改变。

        参数
        field - 要检查的字段,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); 
        参数
        field - 查询范围的字段,不为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"); 
        参数
        field - 要获取的字段,不为null
        结果
        该字段的值在值的有效范围内
        异常
        DateTimeException - 如果无法获取字段的值,或者该值超出了字段有效值的范围
        UnsupportedTemporalTypeException - 如果该字段不受支持或值的范围超过 int
        ArithmeticException - 如果发生数字溢出
      • getLong

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

        这将查询指定字段的值的日期时间。 返回的值可能在该字段的值的有效范围之外。 如果日期时间不能返回值,因为该字段不受支持或由于其他原因,将抛出异常。

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

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

        当这个只读方法被调用时,实现必须确保没有可观察的状态被改变。

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

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

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

        查询是从日期时间提取信息的关键工具。 它们存在于外部化查询过程,根据策略设计模式允许不同的方法。 示例可能是一个查询,检查日期是闰年前的二月二十九日前一天,还是计算下一个生日的天数。

        最常见的查询实现是方法引用,例如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类提供与默认行为相同的行为,则JDK类可能会避免调用super,但是非JDK类可能无法使用此优化,并且必须调用super

        如果实现可以为默认实现的if语句中列出的查询之一提供一个值,那么它必须这样做。 例如,存储小时和分钟的应用程序定义的HourMin类必须重写此方法,如下所示:

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

        当这个只读方法被调用时,实现必须确保没有可观察的状态被改变。

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