Module java.base

Class IsoFields

java.lang.Object
java.time.temporal.IsoFields

public final class IsoFields extends Object
ISO-8601日历系统特定的字段和单位,包括季度和基于周的年份。

此类定义了特定于ISO日历系统的字段和单位。

年度季度

ISO-8601标准基于标准的12个月公民年。通常将其分为四个季度,常缩写为Q1、Q2、Q3和Q4。

1月、2月和3月属于Q1。4月、5月和6月属于Q2。7月、8月和9月属于Q3。10月、11月和12月属于Q4。

完整日期使用三个字段表示:

基于周的年份

ISO-8601标准最初旨在作为数据交换格式,定义了日期和时间的字符串格式。然而,它还定义了一种基于周的年份表达方式。

日期使用三个字段表示:

基于周的年份相对于标准ISO推算年份进行定义。它与标准年份不同之处在于始终从星期一开始。

基于周的年份的第一周是标准ISO年份中新年至少有4天的第一个基于星期一的周。

  • 如果1月1日是星期一,则第1周从1月1日开始
  • 如果1月1日是星期二,则第1周从前一标准年的12月31日开始
  • 如果1月1日是星期三,则第1周从前一标准年的12月30日开始
  • 如果1月1日是星期四,则第1周从前一标准年的12月29日开始
  • 如果1月1日是星期五,则第1周从1月4日开始
  • 如果1月1日是星期六,则第1周从1月3日开始
  • 如果1月1日是星期日,则第1周从1月2日开始
大多数基于周的年份有52周,但偶尔会有53周。

例如:

基于周的年份示例
日期 星期几 字段数值
2008-12-28 星期日 2008年基于周的第52周
2008-12-29 星期一 2009年基于周的第1周
2008-12-31 星期三 2009年基于周的第1周
2009-01-01 星期四 2009年基于周的第1周
2009-01-04 星期日 2009年基于周的第1周
2009-01-05 星期一 2009年基于周的第2周
实现要求:

此类是不可变的且线程安全的。

自版本:
1.8
  • Field Details

    • DAY_OF_QUARTER

      public static final TemporalField DAY_OF_QUARTER
      代表季度内日期的字段。

      此字段允许查询和设置季度内日期值。季度内日期在标准年份的Q1中为1到90,在闰年的Q1中为1到91,在Q2中为1到91,在Q3和Q4中为1到92。

      只有在天数、月份和年份可用时才能计算季度内日期。

      设置此字段时,值允许部分宽松,可取1到92之间的任何值。如果季度天数少于92天,则第92天,可能还有第91天,属于下一个季度。

      在解析阶段,可以从年份、年度季度和季度内日期创建日期。

      严格模式下,所有三个字段都会根据其有效值范围进行验证。季度内日期字段在年份和季度中验证为1到90、91或92。

      智能模式下,所有三个字段都会根据其有效值范围进行验证。季度内日期字段在1到92之间进行验证,忽略基于年份和季度的实际范围。如果季度内日期超出实际范围一天,则结果日期会推迟一天。如果季度内日期超出实际范围两天,则结果日期会推迟两天。

      宽松模式下,只有年份会根据有效值范围进行验证。结果日期相当于以下三个阶段的处理。首先,在请求年份的1月1日创建一个日期。然后取季度内日期,减去一,然后将季度数添加到日期中。最后,取季度内日期,减去一,然后将天数添加到日期中。

      此单位是不可变的且线程安全的单例。

    • QUARTER_OF_YEAR

      public static final TemporalField QUARTER_OF_YEAR
      代表年度季度的字段。

      此字段允许查询和设置年度季度值。年度季度的值为1到4。

      只有在月份可用时才能计算年度季度。

      在解析阶段,可以从年份、年度季度和季度内日期创建日期。详见DAY_OF_QUARTER

      此单位是不可变的且线程安全的单例。

    • WEEK_OF_WEEK_BASED_YEAR

      public static final TemporalField WEEK_OF_WEEK_BASED_YEAR
      代表基于周的年份内周数的字段。

      此字段允许查询和设置基于周的年份内周数值。基于周的年份内周数为1到52,如果基于周的年份有53周,则为53。

      在解析阶段,可以从基于周的年份、基于周的年份内周数和星期几创建日期。

      严格模式下,所有三个字段都会根据其有效值范围进行验证。基于周的年份内周数字段在1到52或53之间进行验证,取决于基于周的年份。

      智能模式下,所有三个字段都会根据其有效值范围进行验证。基于周的年份内周数字段在1到53之间进行验证,忽略基于周的年份。如果基于周的年份内周数为53,但基于周的年份只有52周,则结果日期在下一个基于周的年份的第1周。

      宽松模式下,只有基于周的年份会根据有效值范围进行验证。如果星期几超出1到7的范围,则结果日期会通过适当数量的周数调整,将星期几减少到1到7的范围。如果基于周的年份内周数值超出1到52的范围,则任何多余的周数会被添加或减去结果日期。

      此单位是不可变的且线程安全的单例。

    • WEEK_BASED_YEAR

      public static final TemporalField WEEK_BASED_YEAR
      代表基于周的年份的字段。

      此字段允许查询和设置基于周的年份值。

      该字段的范围与LocalDate.MAXLocalDate.MIN相匹配。

      在解析阶段,可以从基于周的年份、基于周的年份内周数和星期几创建日期。详见WEEK_OF_WEEK_BASED_YEAR

      此单位是不可变的且线程安全的单例。

    • WEEK_BASED_YEARS

      public static final TemporalUnit WEEK_BASED_YEARS
      代表基于周的年份的单位,用于加法和减法目的。

      这允许将一定数量的基于周的年份添加到日期中,或从日期中减去。该单位等于52周或53周。基于周的年份的估计持续时间与标准ISO年份相同,为365.2425天

      加法规则将基于周的年份的数量添加到现有的基于周的年份字段值中。如果结果的基于周的年份只有52周,则日期将位于下一个基于周的年份的第1周。

      此单位是不可变的且线程安全的单例。

    • QUARTER_YEARS

      public static final TemporalUnit QUARTER_YEARS
      代表季度年份概念的单位。对于ISO日历系统,它等于3个月。季度的估计持续时间是365.2425天的四分之一。

      此单位是不可变的且线程安全的单例。