Module java.base

Class WeekFields

java.lang.Object
java.time.temporal.WeekFields
所有已实现的接口:
Serializable

public final class WeekFields extends Object implements Serializable
一周中的星期几、月中的周数和年中的周数的本地化定义。

标准一周为七天,但不同文化对一周的其他方面有不同的定义。该类代表了一周的定义,目的是提供TemporalField实例。

WeekFields提供了五个字段,dayOfWeek()weekOfMonth()weekOfYear()weekOfWeekBasedYear()weekBasedYear(),用于从任何时间对象中访问值。

星期几、月中的周数和年中的周数的计算基于通用年年中的月份月中的日期ISO星期几,这些基于纪元日和年表。这些值可能不与纪元年对齐,取决于年表。

一周的定义如下:

  • 第一天星期几。例如,ISO-8601标准将星期一视为第一天。
  • 第一周中的最少天数。例如,ISO-8601标准将第一周视为至少需要4天。
这两个值共同允许将一年或一个月分成周。

月中的周数

使用一个字段:月中的周数。计算确保周数永远不会跨越月份边界。月份被分成周期,每个周期从定义的第一天星期几开始。最早的周期称为第0周,如果它的天数少于最少天数,则称为第1周。
WeekFields示例
日期 星期几 第一天:星期一
最少天数:4
第一天:星期一
最少天数:5
2008-12-31 星期三 2008年12月的第5周 2008年12月的第5周
2009-01-01 星期四 2009年1月的第1周 2009年1月的第0周
2009-01-04 星期日 2009年1月的第1周 2009年1月的第0周
2009-01-05 星期一 2009年1月的第2周 2009年1月的第1周

年中的周数

使用一个字段:年中的周数。计算确保周数永远不会跨越年份边界。年份被分成周期,每个周期从定义的第一天星期几开始。最早的周期称为第0周,如果它的天数少于最少天数,则称为第1周。

基于周的年份

用于周的年份有两个字段,一个用于基于周的年份的周数,一个用于基于周的年份。在基于周的年份中,每周只属于一个年份。一年中的第1周是从第一天星期几开始并且至少有最少天数的第一周。一年中的第一周和最后一周可能包含来自上一个或下一个日历年的天数。
基于周的年份WeekFields示例
日期 星期几 第一天:星期一
最少天数:4
第一天:星期一
最少天数:5
2008-12-31 星期三 2009年的第1周 2008年的第53周
2009-01-01 星期四 2009年的第1周 2008年的第53周
2009-01-04 星期日 2009年的第1周 2008年的第53周
2009-01-05 星期一 2009年的第2周 2009年的第1周
实现要求:
此类是不可变的且线程安全的。
自从:
1.8
参见:
  • Field Details

    • ISO

      public static final WeekFields ISO
      ISO-8601定义,其中一周从星期一开始,第一周至少有4天。

      ISO-8601标准定义了一个基于周的日历系统。它使用基于周的年份和基于周的年份周数的概念来分割日期的流逝,而不是标准的年/月/日。

      请注意,第一周可能从上一个日历年开始。还请注意,一个日历年的前几天可能属于与上一个日历年对应的基于周的年份。

    • SUNDAY_START

      public static final WeekFields SUNDAY_START
      一周从星期日开始,第一周至少有1天的常见定义。

      定义为从星期日开始,并且一个月中至少有1天。这种周定义在美国和其他欧洲国家中使用。

    • WEEK_BASED_YEARS

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

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

      加法规则将基于周的年份的数量添加到现有的基于周的年份字段值中,保留基于周的年份周数和星期几,除非周数对目标年份来说太大。在这种情况下,将该周设置为具有相同星期几的年份的最后一周。

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

  • Method Details

    • of

      public static WeekFields of(Locale locale)
      获取适用于区域设置的WeekFields实例。

      这将从本地化数据提供程序中查找适当的值。如果区域设置包含"fw"(一周的第一天)和/或"rg"(区域覆盖) Unicode扩展,返回的实例将反映使用这些扩展指定的值。如果"fw"和"rg"都被指定,则来自"fw"扩展的值将取代"rg"扩展的隐式值。

      例如,对于希望使用英语区域设置,但希望第一天是符合ISO-8601标准的用户,可以调用

      Locale enIsoLoc = Locale.forLanguageTag("en-u-fw-mon");
      WeekFields.of(enIsoLoc).getFirstDayOfWeek(); // 返回 MONDAY
      
      参数:
      locale - 要使用的区域设置,不能为空
      返回:
      周定义,不能为空
    • of

      public static WeekFields of(DayOfWeek firstDayOfWeek, int minimalDaysInFirstWeek)
      从第一天星期几和最少天数获取WeekFields的实例。

      第一天星期几定义了一周中的第1天是星期几。第一周中的最少天数定义了必须在一个月或一年中从第一天星期几开始的天数,才能将该周计为第一周。值为1将把月或年的第一天计为第一周的一部分,而值为7将要求整整七天在新的月或年中。

      对于每个唯一的firstDayOfWeekminimalDaysInFirstWeek组合,WeekFields实例都是单例的。

      参数:
      firstDayOfWeek - 一周的第一天,不能为空
      minimalDaysInFirstWeek - 第一周中的最少天数,从1到7
      返回:
      周定义,不能为空
      抛出:
      IllegalArgumentException - 如果最少天数值小于1或大于7
    • getFirstDayOfWeek

      public DayOfWeek getFirstDayOfWeek()
      获取第一天星期几。

      第一天星期几因文化而异。例如,美国使用星期日,而法国和ISO-8601标准使用星期一。此方法使用标准的DayOfWeek枚举返回第一天。

      返回:
      第一天星期几,不能为空
    • getMinimalDaysInFirstWeek

      public int getMinimalDaysInFirstWeek()
      获取第一周中的最小天数。

      根据文化习惯,定义一个月或一年中第一周的天数是不同的。例如,ISO-8601要求在计算第一周之前必须有4天(超过半周)。

      返回:
      一个月或一年中第一周的最小天数,范围从1到7
    • dayOfWeek

      public TemporalField dayOfWeek()
      返回一个字段,用于根据此WeekFields访问星期几。

      这类似于ChronoField.DAY_OF_WEEK,但使用基于此WeekFields的星期几值。星期几从1到7编号,其中第一天星期的值为1。

      例如,如果第一天是星期日,则其值为1,其他天从星期一为2到星期六为7。

      在解析阶段,本地化的星期几将被转换为标准化的ChronoField星期几。星期几必须在有效范围1到7内。此类中的其他字段使用标准化的星期几构建日期。

      返回:
      一个提供访问本地化编号星期几的字段,非空
    • weekOfMonth

      public TemporalField weekOfMonth()
      返回一个字段,用于根据此WeekFields访问月份中的周数。

      这代表了一个月内周数的概念,其中周从固定的星期几开始,例如星期一。此字段通常与dayOfWeek()一起使用。

      第一周(1)是从月份中至少有getMinimalDaysInFirstWeek()天的getFirstDayOfWeek()开始的周。因此,第一周可能在月份开始前最多开始minDays天。如果第一周在月份开始后开始,则之前的时间段为第零周(0)。

      例如:
      - 如果一个月的第一天是星期一,则第一周从第一天开始,没有第零周
      - 如果一个月的第二天是星期一,则第一周从第二天开始,第一天在第零周
      - 如果一个月的第四天是星期一,则第一周从第四天开始,第一天到第三天在第零周
      - 如果一个月的第五天是星期一,则第二周从第五天开始,第一天到第四天在第一周

      此字段可与任何日历系统一起使用。

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

      严格模式下,所有四个字段都将根据其有效值范围进行验证。周数字段将被验证以确保结果月份是所请求的月份。

      智能模式下,所有四个字段都将根据其有效值范围进行验证。周数字段将从0到6进行验证,这意味着结果日期可以在指定的不同月份中。

      宽松模式下,年份和星期几将根据其有效值范围进行验证。结果日期将等效计算为以下四个阶段的方法。首先,在请求的年份的第一周的第一天创建一个日期。然后取得月份中的周数,减去一,并将月份的数量添加到日期中。然后取得月份中的周数,减去一,并将周数的数量添加到日期中。最后,调整到本地化周内的正确星期几。

      返回:
      一个提供访问月份中周数的字段,非空
    • weekOfYear

      public TemporalField weekOfYear()
      返回一个字段,用于根据此WeekFields访问年份中的周数。

      这代表了一年内周数的概念,其中周从固定的星期几开始,例如星期一。此字段通常与dayOfWeek()一起使用。

      第一周(1)是从年份中至少有getMinimalDaysInFirstWeek()天的getFirstDayOfWeek()开始的周。因此,第一周可能在年份开始前最多开始minDays天。如果第一周在年份开始后开始,则之前的时间段为第零周(0)。

      例如:
      - 如果一年的第一天是星期一,则第一周从第一天开始,没有第零周
      - 如果一年的第二天是星期一,则第一周从第二天开始,第一天在第零周
      - 如果一年的第四天是星期一,则第一周从第四天开始,第一天到第三天在第零周
      - 如果一年的第五天是星期一,则第二周从第五天开始,第一天到第四天在第一周

      此字段可与任何日历系统一起使用。

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

      严格模式下,所有三个字段都将根据其有效值范围进行验证。周数字段将被验证以确保结果年份是所请求的年份。

      智能模式下,所有三个字段都将根据其有效值范围进行验证。周数字段将从0到54进行验证,这意味着结果日期可以在指定的不同年份中。

      宽松模式下,年份和星期几将根据其有效值范围进行验证。结果日期将等效计算为以下三个阶段的方法。首先,在请求的年份的第一周的第一天创建一个日期。然后取得年中的周数,减去一,并将周数的数量添加到日期中。最后,调整到本地化周内的正确星期几。

      返回:
      一个提供访问年份中周数的字段,非空
    • weekOfWeekBasedYear

      public TemporalField weekOfWeekBasedYear()
      返回一个字段,用于根据此WeekFields访问基于周的年份中的周数。

      这代表了一年内周数的概念,其中周从固定的星期几开始,例如星期一,每周属于一个确切的年份。此字段通常与dayOfWeek()weekBasedYear()一起使用。

      第一周(1)是从年份中至少有getMinimalDaysInFirstWeek()天的getFirstDayOfWeek()开始的周。如果第一周在年份开始后开始,则之前的时间段为上一年的最后一周。

      例如:
      - 如果一年的第一天是星期一,则第一周从第一天开始
      - 如果一年的第二天是星期一,则第一周从第二天开始,第一天在上一年的最后一周
      - 如果一年的第四天是星期一,则第一周从第四天开始,第一天到第三天在上一年的最后一周
      - 如果一年的第五天是星期一,则第二周从第五天开始,第一天到第四天在第一周

      此字段可与任何日历系统一起使用。

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

      严格模式下,所有三个字段都将根据其有效值范围进行验证。周数字段将被验证以确保结果基于周的年份是所请求的基于周的年份。

      智能模式下,所有三个字段都将根据其有效值范围进行验证。基于周的年份的周数字段将从1到53进行验证,这意味着结果日期可以在指定的后续基于周的年份中。

      宽松模式下,年份和星期几将根据其有效值范围进行验证。结果日期将等效计算为以下三个阶段的方法。首先,在请求的基于周的年份的第一周的第一天创建一个日期。然后取得基于周的年份中的周数,减去一,并将周数的数量添加到日期中。最后,调整到本地化周内的正确星期几。

      返回:
      一个提供访问基于周的年份中周数的字段,非空
    • weekBasedYear

      public TemporalField weekBasedYear()
      返回一个字段,用于根据此WeekFields访问基于周的年份中的年份。

      这代表了周从固定的星期几开始,例如星期一,每周属于一个确切的年份的年份概念。此字段通常与dayOfWeek()weekOfWeekBasedYear()一起使用。

      第一周(1)是从年份中至少有getMinimalDaysInFirstWeek()天的getFirstDayOfWeek()开始的周。因此,第一周可能在年份开始前开始。如果第一周在年份开始后开始,则之前的时间段为上一年的最后一周。

      此字段可与任何日历系统一起使用。

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

      严格模式下,所有三个字段都将根据其有效值范围进行验证。周数字段将被验证以确保结果基于周的年份是所请求的基于周的年份。

      智能模式下,所有三个字段都将根据其有效值范围进行验证。基于周的年份的周数字段将从1到53进行验证,这意味着结果日期可以在指定的后续基于周的年份中。

      宽松模式下,年份和星期几将根据其有效值范围进行验证。结果日期将等效计算为以下三个阶段的方法。首先,在请求的基于周的年份的第一周的第一天创建一个日期。然后取得基于周的年份中的周数,减去一,并将周数的数量添加到日期中。最后,调整到本地化周内的正确星期几。

      返回:
      一个提供访问基于周的年份的字段,非空
    • equals

      public boolean equals(Object object)
      检查此WeekFields是否等于指定的对象。

      比较基于规则的整体状态,即第一天星期和最小天数。

      覆盖:
      equals 在类 Object
      参数:
      object - 要比较的其他规则,null返回false
      返回:
      如果相等则返回true
      参见:
    • hashCode

      public int hashCode()
      WeekFields的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      适当的哈希码
      参见:
    • toString

      public String toString()
      WeekFields实例的字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      字符串表示形式,非null