Module java.base

Enum Class ChronoField

java.lang.Object
java.lang.Enum<ChronoField>
java.time.temporal.ChronoField
所有已实现的接口:
Serializable, Comparable<ChronoField>, Constable, TemporalField

public enum ChronoField extends Enum<ChronoField> implements TemporalField
一组标准字段。

这组字段提供基于字段的访问以操作日期、时间或日期时间。标准字段集可以通过实现TemporalField来扩展。

这些字段旨在适用于多个日历系统。例如,大多数非ISO日历系统将日期定义为年、月和日,只是规则略有不同。每个字段的文档解释了其操作方式。

实现要求:
这是一个最终的、不可变的和线程安全的枚举。
自版本:
1.8
  • Enum Constant Details

    • NANO_OF_SECOND

      public static final ChronoField NANO_OF_SECOND
      纳秒。

      这计算秒内的纳秒,范围从0到999,999,999。此字段对所有日历系统具有相同的含义。

      此字段用于表示纳秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_MINUTESECOND_OF_DAYINSTANT_SECONDS的值,则应为此字段提供一个值,用零填充未知精度。

      当此字段用于设置值时,应根据对象存储的精度设置尽可能多的精度,使用整数除法来去除多余的精度。例如,如果TemporalAccessor将时间存储到毫秒精度,则纳秒必须除以1,000,000,然后替换毫秒。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该字段与MILLI_OF_SECONDMICRO_OF_SECOND结合解析。

    • NANO_OF_DAY

      public static final ChronoField NANO_OF_DAY
      纳秒。

      这计算一天内的纳秒,范围从0到(24 * 60 * 60 * 1,000,000,000) - 1。此字段对所有日历系统具有相同的含义。

      此字段用于表示纳秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_DAY的值,则应为此字段提供一个值,用零填充未知精度。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该值被拆分以形成NANO_OF_SECONDSECOND_OF_MINUTEMINUTE_OF_HOURHOUR_OF_DAY字段。

    • MICRO_OF_SECOND

      public static final ChronoField MICRO_OF_SECOND
      秒内的微秒。

      这计算秒内的微秒,范围从0到999,999。此字段对所有日历系统具有相同的含义。

      此字段用于表示微秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_MINUTESECOND_OF_DAYINSTANT_SECONDS的值,则应为此字段提供一个值,用零填充未知精度。

      当此字段用于设置值时,应与将NANO_OF_SECOND设置为值乘以1,000的方式相同。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该字段与MILLI_OF_SECOND结合解析以生成NANO_OF_SECOND

    • MICRO_OF_DAY

      public static final ChronoField MICRO_OF_DAY
      一天内的微秒。

      这计算一天内的微秒,范围从0到(24 * 60 * 60 * 1,000,000) - 1。此字段对所有日历系统具有相同的含义。

      此字段用于表示微秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_DAY的值,则应为此字段提供一个值,用零填充未知精度。

      当此字段用于设置值时,应与将NANO_OF_DAY设置为值乘以1,000的方式相同。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该值被拆分以形成MICRO_OF_SECONDSECOND_OF_MINUTEMINUTE_OF_HOURHOUR_OF_DAY字段。

    • MILLI_OF_SECOND

      public static final ChronoField MILLI_OF_SECOND
      秒内的毫秒。

      这计算秒内的毫秒,范围从0到999。此字段对所有日历系统具有相同的含义。

      此字段用于表示毫秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_MINUTESECOND_OF_DAYINSTANT_SECONDS的值,则应为此字段提供一个值,用零填充未知精度。

      当此字段用于设置值时,应与将NANO_OF_SECOND设置为值乘以1,000,000的方式相同。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该字段与MICRO_OF_SECOND结合解析以生成NANO_OF_SECOND

    • MILLI_OF_DAY

      public static final ChronoField MILLI_OF_DAY
      一天内的毫秒。

      这计算一天内的毫秒,范围从0到(24 * 60 * 60 * 1,000) - 1。此字段对所有日历系统具有相同的含义。

      此字段用于表示毫秒处理秒的任何小数部分。如果TemporalAccessor的实现可以返回SECOND_OF_DAY的值,则应为此字段提供一个值,用零填充未知精度。

      当此字段用于设置值时,应与将NANO_OF_DAY设置为值乘以1,000,000的方式相同。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该值被拆分以形成MILLI_OF_SECONDSECOND_OF_MINUTEMINUTE_OF_HOURHOUR_OF_DAY字段。

    • SECOND_OF_MINUTE

      public static final ChronoField SECOND_OF_MINUTE
      分钟内的秒。

      这计算小时内的分钟,范围从0到59。此字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。

    • SECOND_OF_DAY

      public static final ChronoField SECOND_OF_DAY
      一天内的秒。

      这计算一天内的秒,范围从0到(24 * 60 * 60) - 1。此字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。该值被拆分以形成SECOND_OF_MINUTEMINUTE_OF_HOURHOUR_OF_DAY字段。

    • MINUTE_OF_HOUR

      public static final ChronoField MINUTE_OF_HOUR
      小时内的分钟。

      这计算小时内的分钟,范围从0到59。此字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:在严格和智能模式下验证值,但不在宽松模式下验证。

    • MINUTE_OF_DAY

      public static final ChronoField MINUTE_OF_DAY
      一天中的分钟。

      这计算一天中的分钟数,从0到(24 * 60) - 1。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格和智能模式下进行验证,但在宽松模式下不进行验证。该值被拆分为MINUTE_OF_HOURHOUR_OF_DAY字段。

    • HOUR_OF_AMPM

      public static final ChronoField HOUR_OF_AMPM
      上午/下午的小时。

      这计算上午/下午的小时数,从0到11。这是在标准12小时数字时钟上观察到的小时数。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格和智能模式下从0到11进行验证。在宽松模式下,该值不会被验证。它与AMPM_OF_DAY结合,通过将AMPM_OF_DAY值乘以12来形成HOUR_OF_DAY

      请参阅相关字段CLOCK_HOUR_OF_AMPM,它计算从1到12的小时数。

    • CLOCK_HOUR_OF_AMPM

      public static final ChronoField CLOCK_HOUR_OF_AMPM
      上午/下午的时钟小时。

      这计算上午/下午的小时数,从1到12。这是在标准12小时模拟挂钟上观察到的小时数。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格模式下从1到12进行验证,在智能模式下从0到12进行验证。在宽松模式下,该值不会被验证。该字段转换为具有相同值的HOUR_OF_AMPM,除非该值为12,否则将转换为0。

      请参阅相关字段HOUR_OF_AMPM,它计算从0到11的小时数。

    • HOUR_OF_DAY

      public static final ChronoField HOUR_OF_DAY
      一天中的小时。

      这计算一天中的小时数,从0到23。这是在标准24小时数字时钟上观察到的小时数。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格和智能模式下进行验证,但在宽松模式下不进行验证。该字段与MINUTE_OF_HOURSECOND_OF_MINUTENANO_OF_SECOND结合,以生成LocalTime。在宽松模式下,任何多余的天数都将添加到解析的日期中,或通过DateTimeFormatter.parsedExcessDays()提供。

      请参阅相关字段CLOCK_HOUR_OF_DAY,它计算从1到24的小时数。

    • CLOCK_HOUR_OF_DAY

      public static final ChronoField CLOCK_HOUR_OF_DAY
      一天中的时钟小时。

      这计算一天中的小时数,从1到24。这是在24小时模拟挂钟上观察到的小时数。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格模式下从1到24进行验证,在智能模式下从0到24进行验证。在宽松模式下,该值不会被验证。该字段转换为具有相同值的HOUR_OF_DAY,除非该值为24,否则将转换为0。

      请参阅相关字段HOUR_OF_DAY,它计算从0到23的小时数。

    • AMPM_OF_DAY

      public static final ChronoField AMPM_OF_DAY
      一天中的上午/下午。

      这计算一天中的上午/下午,从0(上午)到1(下午)。这个字段对所有日历系统具有相同的含义。

      解析此字段时,其行为等同于以下内容:该值在严格和智能模式下从0到1进行验证。在宽松模式下,该值不会被验证。它与HOUR_OF_AMPM结合(如果不存在,默认为'6'),通过将AMPM_OF_DAY值乘以12来形成HOUR_OF_DAY

    • DAY_OF_WEEK

      public static final ChronoField DAY_OF_WEEK
      一周中的星期几,例如星期二。

      这代表一周中星期几的标准概念。在默认的ISO日历系统中,这些值从星期一(1)到星期日(7)。DayOfWeek类可用于解释结果。

      大多数非ISO日历系统也定义了与ISO对齐的七天周。这些日历系统还必须使用相同的编号系统,从星期一(1)到星期日(7),这允许使用DayOfWeek

      如果没有标准的七天周,日历系统应实现此字段,如果它们具有类似于一周的具名或编号天数的概念。建议从1开始编号。

    • ALIGNED_DAY_OF_WEEK_IN_MONTH

      public static final ChronoField ALIGNED_DAY_OF_WEEK_IN_MONTH
      一个月中对齐的星期几。

      这代表对齐到月初的一周内的天数计数概念。此字段通常与ALIGNED_WEEK_OF_MONTH一起使用。

      例如,在具有七天周的日历系统中,第一个对齐的月周从月份的第1天开始,第二个对齐的周从第8天开始,依此类推。在每个对齐的周内,天数从1到7编号,并作为此字段的值返回。因此,从第1天到第7天将具有从1到7的对齐星期几值。从第8天到第14天将重复此过程,对齐星期几值从1到7。

      没有七天周的日历系统通常应以相同的方式实现此字段,但使用替代的周长度。

    • ALIGNED_DAY_OF_WEEK_IN_YEAR

      public static final ChronoField ALIGNED_DAY_OF_WEEK_IN_YEAR
      一年中对齐的星期几。

      这代表对齐到年初的一周内的天数计数概念。此字段通常与ALIGNED_WEEK_OF_YEAR一起使用。

      例如,在具有七天周的日历系统中,第一个对齐的年周从年份的第1天开始,第二个对齐的周从第8天开始,依此类推。在每个对齐的周内,天数从1到7编号,并作为此字段的值返回。因此,从第1天到第7天将具有从1到7的对齐星期几值。从第8天到第14天将重复此过程,对齐星期几值从1到7。

      没有七天周的日历系统通常应以相同的方式实现此字段,但使用替代的周长度。

    • DAY_OF_MONTH

      public static final ChronoField DAY_OF_MONTH
      一个月中的日期。

      这代表一个月中的日期概念。在默认的ISO日历系统中,大多数月份的日期从1到31。4月、6月、9月、11月的日期为1到30,而2月的日期为1到28,闰年为29。

      非ISO日历系统应使用日历系统用户最熟悉的日期值来实现此字段。通常,这是从1到月份长度的天数计数。

    • DAY_OF_YEAR

      public static final ChronoField DAY_OF_YEAR
      一年中的日期。

      这代表一年中的日期概念。在默认的ISO日历系统中,标准年份的日期从1到365,闰年为1到366。

      非ISO日历系统应使用日历系统用户最熟悉的日期值来实现此字段。通常,这是从1到年份长度的天数计数。

      请注意,非ISO日历系统可能具有在月份编号的自然重置点之外更改的年编号系统。一个例子是日本日历系统,其中一个时代的更改,将年号重置为1,可以发生在任何日期。时代和年号重置也会导致日期重置为1,但月份或日期不会。

    • EPOCH_DAY

      public static final ChronoField EPOCH_DAY
      基于Java纪元1970-01-01(ISO)的纪元日。

      这个字段是1970-01-01(ISO)为零的连续天数计数。请注意,这使用本地时间线,忽略偏移和时区。

      此字段在所有日历系统中严格定义具有相同的含义。这是为了确保日历之间的互操作性。

      EpochDay的范围在(LocalDate.MIN.toEpochDay(),LocalDate.MAX.toEpochDay())之间,两者都包括在内。

    • ALIGNED_WEEK_OF_MONTH

      public static final ChronoField ALIGNED_WEEK_OF_MONTH
      一个月中的对齐周。

      这代表对齐到月初的一月内的周数计数概念。此字段通常与ALIGNED_DAY_OF_WEEK_IN_MONTH一起使用。

      例如,在具有七天周的日历系统中,第一个对齐的月周从月份的第1天开始,第二个对齐的周从月份的第8天开始,依此类推。因此,从第1天到第7天的日期属于对齐周1,而从第8天到第14天的日期属于对齐周2,依此类推。

      没有七天周的日历系统通常应以相同的方式实现此字段,但使用替代的周长度。

    • ALIGNED_WEEK_OF_YEAR

      public static final ChronoField ALIGNED_WEEK_OF_YEAR
      一年中的对齐周。

      这代表对齐到年初的一年内的周数计数概念。此字段通常与ALIGNED_DAY_OF_WEEK_IN_YEAR一起使用。

      例如,在具有七天周的日历系统中,第一个对齐的年周从年份的第1天开始,第二个对齐的周从年份的第8天开始,依此类推。因此,从第1天到第7天的日期属于对齐周1,而从第8天到第14天的日期属于对齐周2,依此类推。

      没有七天周的日历系统通常应以相同的方式实现此字段,但使用替代的周长度。

    • MONTH_OF_YEAR

      public static final ChronoField MONTH_OF_YEAR
      一年中的月份,例如三月。

      这代表一年中的月份概念。在默认的ISO日历系统中,月份的值从一月(1)到十二月(12)。

      非ISO日历系统应使用日历系统用户最熟悉的月份值来实现此字段。通常,这是从1开始的月份计数。

    • PROLEPTIC_MONTH

      public static final ChronoField PROLEPTIC_MONTH
      基于推测年份的月份,从零开始顺序计算月份。

      这个字段是月份的连续计数,其中推测年份零的第一个月的值为零。后续月份的值逐渐增大。较早的月份值逐渐减小。月份序列中没有间隙或中断。请注意,这使用本地时间线,忽略偏移和时区。

      在默认的ISO日历系统中,2012年6月的值将为(2012 * 12 + 6 - 1)。此字段主要用于内部使用。

      非ISO日历系统必须按照上述定义实现此字段。这只是从推测年份0开始的已过月份的简单基于零的计数。所有具有完整推测年份定义的日历系统都将具有零年。如果日历系统具有排除零年的最小年份,则必须进行外推以定义此方法。

    • YEAR_OF_ERA

      public static final ChronoField YEAR_OF_ERA
      时代中的年份。

      表示时代中年份的概念。此字段通常与ERA一起使用。

      日期的标准心智模型基于三个概念 - 年、月和日。这些概念映射到YEARMONTH_OF_YEARDAY_OF_MONTH字段。请注意,没有提及时代。日期的完整模型需要四个概念 - 时代、年、月和日。这些概念映射到ERAYEAR_OF_ERAMONTH_OF_YEARDAY_OF_MONTH字段。使用此字段还是YEAR取决于使用的心智模型。有关此主题的更多讨论,请参见ChronoLocalDate

      在默认的ISO日历系统中,定义了两个时代,'BCE'和'CE'。时代'CE'是当前使用的时代,年代从1到最大值。时代'BCE'是以前的时代,年代向后运行。

      例如,每次减去一年会产生以下结果:
      - 年代前 2 = 'CE' 年代 2
      - 年代前 1 = 'CE' 年代 1
      - 年代前 0 = 'BCE' 年代 1
      - 年代前 -1 = 'BCE' 年代 2

      请注意,ISO-8601标准实际上没有定义时代。还要注意,由于儒略历和格里高利历之间的变化,ISO时代与众所周知的公元前/公元后时代不对齐。

      非ISO日历系统应使用最受认可的年代值来实现此字段,以供日历系统的用户使用。由于大多数日历系统只有两个时代,年代编号方法通常与ISO日历系统使用的方法相同。年代值通常应始终为正值,但不是必需的。

    • YEAR

      public static final ChronoField YEAR
      纪年年份,例如2012年。

      表示年份的概念,按顺序计数并使用负数。纪年年份不是根据时代解释的。请参见YEAR_OF_ERA,其中显示了从纪年年份到年代年份的映射示例。

      日期的标准心智模型基于三个概念 - 年、月和日。这些概念映射到YEARMONTH_OF_YEARDAY_OF_MONTH字段。请注意,没有提及时代。日期的完整模型需要四个概念 - 时代、年、月和日。这些概念映射到ERAYEAR_OF_ERAMONTH_OF_YEARDAY_OF_MONTH字段。使用此字段还是YEAR_OF_ERA取决于使用的心智模型。有关此主题的更多讨论,请参见ChronoLocalDate

      非ISO日历系统应按以下方式实现此字段。如果日历系统只有两个时代,即某一固定日期之前和之后,则纪年年份的值必须与后一个时代的年代年份值相同,并且对于较早的时代,值应逐渐减小。如果日历系统有两个以上的时代,则可以使用任何适当的值来定义纪年年份,尽管将其定义为与ISO相同可能是最佳选择。

    • ERA

      public static final ChronoField ERA
      时代。

      表示时间线上最大的分区概念。此字段通常与YEAR_OF_ERA一起使用。

      在默认的ISO日历系统中,定义了两个时代,'BCE'和'CE'。时代'CE'是当前使用的时代,年代从1到最大值。时代'BCE'是以前的时代,年代向后运行。请参见YEAR_OF_ERA以获取完整示例。

      非ISO日历系统应实现此字段以定义时代。在1970-01-01(ISO)活动的时代的值必须分配值1。较早的时代必须具有顺序较小的值。较晚的时代必须具有顺序较大的值。

    • INSTANT_SECONDS

      public static final ChronoField INSTANT_SECONDS
      瞬时时间戳(以秒为单位)。

      表示1970-01-01T00:00Z(ISO)为零时的秒数顺序计数的概念。此字段可与NANO_OF_SECOND一起使用,以表示秒的小数部分。

      Instant表示时间线上的瞬时点。单独使用时,瞬时点没有足够的信息来计算本地日期时间。只有与偏移量或时区配对时,才能计算本地日期或时间。

      此字段在所有日历系统中严格定义具有相同的含义。这是确保日历之间互操作性所必需的。

    • OFFSET_SECONDS

      public static final ChronoField OFFSET_SECONDS
      与UTC/Greenwich的偏移量。

      表示本地时间与UTC/Greenwich之间的偏移量的概念(以秒为单位)。

      ZoneOffset表示本地时间与UTC/Greenwich之间的时间段。这通常是固定的小时数和分钟数。它等同于偏移量的秒数的total amount。例如,在冬季,巴黎的偏移量为+01:00,即3600秒。

      此字段在所有日历系统中严格定义具有相同的含义。这是确保日历之间互操作性所必需的。

  • Method Details

    • values

      public static ChronoField[] values()
      返回包含此枚举类的常量的数组,按照它们声明的顺序排列。
      返回:
      返回包含此枚举类的常量的数组,按照它们声明的顺序排列
    • valueOf

      public static ChronoField valueOf(String name)
      返回具有指定名称的此类的枚举常量。字符串必须与此类中用于声明枚举常量的标识符完全匹配。(不允许存在多余的空格字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为null
    • getBaseUnit

      public TemporalUnit getBaseUnit()
      从接口中复制的描述: TemporalField
      获取字段的计量单位。

      字段的单位是在范围内变化的周期。例如,在字段'MonthOfYear'中,单位是'Months'。另请参见TemporalField.getRangeUnit()

      在接口中指定:
      getBaseUnit 在接口 TemporalField
      返回:
      定义字段基本单位的单位,非null
    • getRangeUnit

      public TemporalUnit getRangeUnit()
      从接口中复制的描述: TemporalField
      获取字段受限制的范围。

      字段的范围是字段变化的周期。例如,在字段'MonthOfYear'中,范围是'Years'。另请参见TemporalField.getBaseUnit()

      范围永远不会为null。例如,'Year'字段是'YearOfForever'的简写。因此,它的单位是'Years',范围是'Forever'。

      在接口中指定:
      getRangeUnit 在接口 TemporalField
      返回:
      定义字段范围的单位,非null
    • range

      public ValueRange range()
      获取字段的有效值范围。

      所有字段都可以表示为long整数。此方法返回一个描述该值的有效范围的对象。

      此方法返回ISO-8601日历系统中字段的范围。对于其他日历系统,此范围可能不正确。使用Chronology.range(ChronoField)来访问不同日历系统的正确范围。

      请注意,结果仅描述最小和最大有效值,重要的是不要过分解读。例如,范围内可能存在对于字段无效的值。

      在接口中指定:
      range 在接口 TemporalField
      返回:
      字段的有效值范围,非null
    • isDateBased

      public boolean isDateBased()
      检查此字段是否表示日期的组成部分。

      从星期几到时代的字段是基于日期的。

      在接口中指定:
      isDateBased 在接口 TemporalField
      返回:
      如果它是日期的组成部分,则为true
    • isTimeBased

      public boolean isTimeBased()
      检查此字段是否表示时间的组成部分。

      从秒的纳秒到白天的上午/下午是基于时间的。

      在接口中指定:
      isTimeBased 在接口 TemporalField
      返回:
      如果它是时间的组成部分,则为true
    • checkValidValue

      public long checkValidValue(long value)
      检查指定的值是否对此字段有效。

      这会验证该值是否在range()返回的有效值的外部范围内。

      此方法检查ISO-8601日历系统中字段的范围。对于其他日历系统,此范围可能不正确。使用Chronology.range(ChronoField)来访问不同日历系统的正确范围。

      参数:
      value - 要检查的值
      返回:
      传入的值
    • checkValidIntValue

      public int checkValidIntValue(long value)
      检查指定的值是否有效并适合于int

      验证该值是否在range()返回的有效值范围之内。还检查所有有效值是否在int的边界内。

      此方法针对ISO-8601日历系统中字段的范围进行检查。对于其他日历系统,此范围可能不正确。使用Chronology.range(ChronoField)来访问不同日历系统的正确范围。

      参数:
      value - 要检查的值
      返回:
      传入的值
    • isSupportedBy

      public boolean isSupportedBy(TemporalAccessor temporal)
      从接口复制的描述: TemporalField
      检查此字段是否受到时间对象的支持。

      确定时间访问器是否支持此字段。如果返回false,则无法查询此字段的时间对象。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用TemporalAccessor.isSupported(TemporalField)

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisField.isSupportedBy(temporal);
         temporal = temporal.isSupported(thisField);
       
      建议使用第二种方法isSupported(TemporalField),因为在代码中更清晰易读。

      实现应使用ChronoField中可用的字段来确定它们是否受支持。

      指定者:
      isSupportedBy 在接口 TemporalField
      参数:
      temporal - 要查询的时间对象,不能为空
      返回:
      如果可以查询此字段的日期时间,则为true,否则为false
    • rangeRefinedBy

      public ValueRange rangeRefinedBy(TemporalAccessor temporal)
      从接口复制的描述: TemporalField
      使用时间对象来细化结果,获取此字段的有效值范围。

      使用时间对象查找字段的有效值范围。这类似于TemporalField.range(),但此方法使用时间对象细化结果。例如,如果字段是DAY_OF_MONTH,则range方法不准确,因为有四种可能的月份长度,分别为28、29、30和31天。使用此方法与日期一起允许范围准确,返回这四个选项中的一个。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用TemporalAccessor.range(TemporalField)

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisField.rangeRefinedBy(temporal);
         temporal = temporal.range(thisField);
       
      建议使用第二种方法range(TemporalField),因为在代码中更清晰易读。

      实现应使用ChronoField中可用的字段执行任何查询或计算。如果不支持该字段,则必须抛出UnsupportedTemporalTypeException

      指定者:
      rangeRefinedBy 在接口 TemporalField
      参数:
      temporal - 用于细化结果的时间对象,不能为空
      返回:
      此字段的有效值范围,不能为空
    • getFrom

      public long getFrom(TemporalAccessor temporal)
      从接口复制的描述: TemporalField
      从指定的时间对象获取此字段的值。

      查询时间对象的此字段的值。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用TemporalAccessor.getLong(TemporalField)(或TemporalAccessor.get(TemporalField)):

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisField.getFrom(temporal);
         temporal = temporal.getLong(thisField);
       
      建议使用第二种方法getLong(TemporalField),因为在代码中更清晰易读。

      实现应使用ChronoField中可用的字段执行任何查询或计算。如果不支持该字段,则必须抛出UnsupportedTemporalTypeException

      指定者:
      getFrom 在接口 TemporalField
      参数:
      temporal - 要查询的时间对象,不能为空
      返回:
      此字段的值,不能为空
    • adjustInto

      public <R extends Temporal> R adjustInto(R temporal, long newValue)
      从接口复制的描述: TemporalField
      返回具有设置此字段值的指定时间对象的副本。

      基于指定的时间对象返回一个新的时间对象,其中此字段的值已更改。例如,在LocalDate上,可以用于设置年、月或日期。返回的对象具有与指定对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则将月份更改为2月将是不清楚的。在这种情况下,实现负责解析结果。通常情况下,它将选择前一个有效日期,例如在此示例中为2月的最后一个有效日期。

      有两种等效的使用此方法的方式。第一种是直接调用此方法。第二种是使用Temporal.with(TemporalField, long)

         // 这两行是等效的,但建议使用第二种方法
         temporal = thisField.adjustInto(temporal);
         temporal = temporal.with(thisField);
       
      建议使用第二种方法with(TemporalField),因为在代码中更清晰易读。

      实现应使用ChronoField中可用的字段执行任何查询或计算。如果不支持该字段,则必须抛出UnsupportedTemporalTypeException

      实现不得更改指定的时间对象。而是必须返回原始对象的调整副本。这为不可变和可变实现提供了等效且安全的行为。

      指定者:
      adjustInto 在接口 TemporalField
      类型参数:
      R - Temporal对象的类型
      参数:
      temporal - 要调整的时间对象,不能为空
      newValue - 字段的新值
      返回:
      调整后的时间对象,不能为空
    • toString

      public String toString()
      从类复制的描述: Enum
      返回此枚举常量的名称,如声明中所包含的那样。虽然可以重写此方法,但通常不是必要或理想的。当存在更“程序员友好”的字符串形式时,枚举类应该重写此方法。
      指定者:
      toString 在接口 TemporalField
      覆盖:
      toString 在类 Enum<ChronoField>
      返回:
      此枚举常量的名称