模块 java.base
 java.time

枚举类枚举类 Month

所有已实现的接口:
Serializable , Comparable<Month> , Constable , TemporalAccessor , TemporalAdjuster

public enum Month extends Enum <Month > implements TemporalAccessor , TemporalAdjuster
一年中的一个月,例如“七月”。

Month 是代表一年中 12 个月的枚举 - 一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月和十二月。

除了文本枚举名称之外,每个月份都有一个 int 值。 int 值遵循正常用法和 ISO-8601 标准,从 1(一月)到 12(十二月)。建议应用程序使用枚举而不是 int 值以确保代码清晰。

不要使用 ordinal() 获取 Month 的数字表示。请改用 getValue()

这个枚举代表了一个常见的概念,在许多日历系统中都能找到。因此,这个枚举可以被任何具有与 ISO-8601 日历系统完全相同定义的年月概念的日历系统使用。

实现要求:
这是一个不可变且线程安全的枚举。
自从:
1.8
  • 枚举常量详细信息

    • JANUARY

      public static final Month  JANUARY
      一月份的单例实例有 31 天。这具有 1 的数值。
    • FEBRUARY

      public static final Month  FEBRUARY
      2 月份的单例实例有 28 天,闰年为 29 天。这具有 2 的数值。
    • MARCH

      public static final Month  MARCH
      3 月的单例实例,共 31 天。这具有 3 的数值。
    • APRIL

      public static final Month  APRIL
      4 月份的单例实例,有 30 天。这具有 4 的数值。
    • MAY

      public static final Month  MAY
      5 月份的单例实例,共 31 天。这具有 5 的数值。
    • JUNE

      public static final Month  JUNE
      月份的单例实例,有 30 天。这具有 6 的数值。
    • JULY

      public static final Month  JULY
      7 月的单例实例,共 31 天。这具有 7 的数值。
    • AUGUST

      public static final Month  AUGUST
      8 月的单例实例,共 31 天。这具有 8 的数值。
    • SEPTEMBER

      public static final Month  SEPTEMBER
      9 月份的单例实例有 30 天。这具有 9 的数值。
    • OCTOBER

      public static final Month  OCTOBER
      10 月份的单例实例,共 31 天。这具有 10 的数值。
    • NOVEMBER

      public static final Month  NOVEMBER
      11 月份的单例实例有 30 天。这具有 11 的数值。
    • DECEMBER

      public static final Month  DECEMBER
      12 月的单例实例,共 31 天。这具有 12 的数值。
  • 方法详情

    • values

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

      public static Month  valueOf(String  name)
      返回具有指定名称的此类的枚举常量。字符串必须匹配确切地用于在此类中声明枚举常量的标识符。 (不允许使用无关的空白字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为空
    • of

      public static Month  of(int month)
      int 值获取 Month 的实例。

      Month 是代表一年中 12 个月的枚举。该工厂允许从 int 值中获取枚举。 int 值遵循 ISO-8601 标准,从 1(一月)到 12(十二月)。

      参数:
      month - 要表示的月份,从 1(一月)到 12(十二月)
      返回:
      月份,不为空
      抛出:
      DateTimeException - 如果月份无效
    • from

      public static Month  from(TemporalAccessor  temporal)
      从时间对象中获取 Month 的实例。

      这将根据指定的时间获得一个月。 TemporalAccessor 表示一组任意的日期和时间信息,该工厂将其转换为 Month 的一个实例。

      转换提取 MONTH_OF_YEAR 字段。仅当时间对象具有 ISO 年表或可以转换为 LocalDate 时才允许提取。

      此方法与功能接口 TemporalQuery 的签名相匹配,允许它通过方法参考 Month::from 用作查询。

      参数:
      temporal - 要转换的时间对象,不为空
      返回:
      月份,不为空
      抛出:
      DateTimeException - 如果无法转换为 Month
    • getValue

      public int getValue()
      获取月份 int 值。

      这些值按照 ISO-8601 标准编号,从 1(一月)到 12(十二月)。

      返回:
      一年中的月份,从 1(一月)到 12(十二月)
    • getDisplayName

      public String  getDisplayName(TextStyle  style, Locale  locale)
      获取文本表示形式,例如“Jan”或“December”。

      这将返回用于标识月份的文本名称,适合呈现给用户。参数控制返回文本的样式和locale。

      如果未找到文本映射,则返回 numeric value

      参数:
      style - 所需文本的长度,不为空
      locale - 要使用的locale,不为空
      返回:
      月份的文本值,不为空
    • isSupported

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

      这将检查是否可以查询指定字段的月份。如果为 false,则调用 range get 方法将抛出异常。

      如果该字段为 MONTH_OF_YEAR ,则此方法返回 true。所有其他 ChronoField 实例将返回 false。

      如果该字段不是 ChronoField ,则通过调用 TemporalField.isSupportedBy(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。字段是否支持由字段决定。

      指定者:
      isSupported 在接口 TemporalAccessor
      参数:
      field - 要检查的字段,null 返回 false
      返回:
      如果这个月份支持该字段,则为 true,否则为 false
    • range

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

      范围对象表示字段的最小和最大有效值。这个月用于增强返回范围的准确性。如果由于不支持该字段或其他原因而无法返回范围,则会抛出异常。

      如果该字段为 MONTH_OF_YEAR ,则将返回从 1 到 12 的月份范围。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.rangeRefinedBy(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取范围由字段决定。

      指定者:
      range 在接口 TemporalAccessor
      参数:
      field - 查询范围的字段,不为空
      返回:
      该字段的有效值范围,不为空
      抛出:
      DateTimeException - 如果无法获得该字段的范围
      UnsupportedTemporalTypeException - 如果不支持该字段
    • get

      public int get(TemporalField  field)
      从这个月份获取指定字段的值作为 int

      这会在本月查询指定字段的值。返回值将始终在该字段的有效值范围内。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。

      如果该字段为 MONTH_OF_YEAR ,则将返回从 1 到 12 的月份值。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.getFrom(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。

      指定者:
      get 在接口 TemporalAccessor
      参数:
      field - 要获取的字段,不为空
      返回:
      字段的值,在值的有效范围内
      抛出:
      DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围
      UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过 int
      ArithmeticException - 如果发生数字溢出
    • getLong

      public long getLong(TemporalField  field)
      从这个月份获取指定字段的值作为 long

      这会在本月查询指定字段的值。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。

      如果该字段为 MONTH_OF_YEAR ,则将返回从 1 到 12 的月份值。所有其他 ChronoField 实例将抛出 UnsupportedTemporalTypeException

      如果该字段不是 ChronoField ,则通过调用 TemporalField.getFrom(TemporalAccessor) 传递 this 作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。

      指定者:
      getLong 在接口 TemporalAccessor
      参数:
      field - 要获取的字段,不为空
      返回:
      该字段的值
      抛出:
      DateTimeException - 如果无法获得该字段的值
      UnsupportedTemporalTypeException - 如果不支持该字段
      ArithmeticException - 如果发生数字溢出
    • plus

      public Month  plus(long months)
      返回一年中的月份,即在此月份之后的指定月份数。

      计算从 12 月到 1 月左右的年底滚动。指定期间可能为负数。

      此实例是不可变的,不受此方法调用的影响。

      参数:
      months - 要添加的月份,正数或负数
      返回:
      结果月份,不为空
    • minus

      public Month  minus(long months)
      返回在此之前的指定月数的一年中的月份。

      计算从年初开始,从一月到十二月。指定期间可能为负数。

      此实例是不可变的,不受此方法调用的影响。

      参数:
      months - 要减去的月份,正数或负数
      返回:
      结果月份,不为空
    • length

      public int length(boolean leapYear)
      获取本月的天数。

      这需要一个标志来确定是否返回闰年的长度。

      二月平年有28天,闰年有29天。 4 月、6 月、9 月和 11 月有 30 天。所有其他月份都有 31 天。

      参数:
      leapYear - 如果闰年需要长度则为真
      返回:
      这个月的天数,从 28 到 31
    • minLength

      public int minLength()
      获取本月的最短天数。

      二月的最短长度为 28 天。 4 月、6 月、9 月和 11 月有 30 天。所有其他月份都有 31 天。

      返回:
      本月的最短天数,从 28 到 31
    • maxLength

      public int maxLength()
      获取本月的最大长度(以天为单位)。

      二月最长为 29 天。 4 月、6 月、9 月和 11 月有 30 天。所有其他月份都有 31 天。

      返回:
      本月的最大天数,从 29 到 31
    • firstDayOfYear

      public int firstDayOfYear(boolean leapYear)
      获取对应于本月第一天的年中第几天。

      这将返回本月开始的一年中的第几天,使用闰年标志来确定二月的长度。

      参数:
      leapYear - 如果闰年需要长度则为真
      返回:
      对应于本月第一天的一年中的第几天,从 1 到 336
    • firstMonthOfQuarter

      public Month  firstMonthOfQuarter()
      获取本季度第一个月对应的月份。

      一年可分为四个季度。此方法返回基月的季度的第一个月。一月、二月和三月返回一月。四月、五月和六月返回四月。七月、八月和九月返回七月。十月、十一月和十二月返回十月。

      返回:
      本月对应季度的第一个月,不为空
    • query

      public <R> R query(TemporalQuery <R> query)
      使用指定的查询查询这个月份。

      这使用指定的查询策略对象查询这个月份。 TemporalQuery 对象定义了用于获取结果的逻辑。阅读查询文档以了解此方法的结果。

      此方法的结果是通过对指定查询调用 TemporalQuery.queryFrom(TemporalAccessor) 方法并将 this 作为参数传递来获得的。

      指定者:
      query 在接口 TemporalAccessor
      类型参数:
      R - 结果的类型
      参数:
      query - 要调用的查询,不为空
      返回:
      查询结果,可能返回null(由查询定义)
      抛出:
      DateTimeException - 如果无法查询(由查询定义)
      ArithmeticException - 如果发生数字溢出(由查询定义)
    • adjustInto

      public Temporal  adjustInto(Temporal  temporal)
      调整指定的时间对象以具有这个月份。

      这将返回一个与输入相同的可观察类型的时间对象,其中月份更改为与此相同。

      调整相当于使用Temporal.with(TemporalField, long) 传递ChronoField.MONTH_OF_YEAR 作为字段。如果指定的时间对象不使用 ISO 日历系统,则抛出 DateTimeException

      在大多数情况下,使用 Temporal.with(TemporalAdjuster) 反转调用模式会更清楚:

        // these two lines are equivalent, but the second approach is recommended
        temporal = thisMonth.adjustInto(temporal);
        temporal = temporal.with(thisMonth);
       

      例如,给定一个五月的日期,输出如下:

        dateInMay.with(JANUARY);  // four months earlier
        dateInMay.with(APRIL);   // one months earlier
        dateInMay.with(MAY);    // same date
        dateInMay.with(JUNE);    // one month later
        dateInMay.with(DECEMBER);  // seven months later
       

      此实例是不可变的,不受此方法调用的影响。

      指定者:
      adjustInto 在接口 TemporalAdjuster
      参数:
      temporal - 要调整的目标对象,不为空
      返回:
      调整后的对象,不为空
      抛出:
      DateTimeException - 如果无法进行调整
      ArithmeticException - 如果发生数字溢出