Module java.base
Package java.time

Enum Class 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
  • Enum Constant Details

    • JANUARY

      public static final Month JANUARY
      一月的单例实例,有31天。其数字值为1
    • FEBRUARY

      public static final Month FEBRUARY
      二月的单例实例,在闰年中有29天,否则为28天。其数字值为2
    • MARCH

      public static final Month MARCH
      三月的单例实例,有31天。其数字值为3
    • APRIL

      public static final Month APRIL
      四月的单例实例,有30天。其数字值为4
    • MAY

      public static final Month MAY
      五月的单例实例,有31天。其数字值为5
    • JUNE

      public static final Month JUNE
      六月的单例实例,有30天。其数字值为6
    • JULY

      public static final Month JULY
      七月的单例实例,有31天。其数字值为7
    • AUGUST

      public static final Month AUGUST
      八月的单例实例,有31天。其数字值为8
    • SEPTEMBER

      public static final Month SEPTEMBER
      九月的单例实例,有30天。其数字值为9
    • OCTOBER

      public static final Month OCTOBER
      十月的单例实例,有31天。其数字值为10
    • NOVEMBER

      public static final Month NOVEMBER
      十一月的单例实例,有30天。其数字值为11
    • DECEMBER

      public static final Month DECEMBER
      十二月的单例实例,有31天。其数字值为12
  • Method Details

    • values

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

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

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

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

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

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

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

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

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用Month::from来使用它作为查询。

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

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

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

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

      public String getDisplayName(TextStyle style, Locale locale)
      获取文本表示,如'一月'或'十二月'。

      返回用于标识月份的文本名称,适合向用户展示。参数控制返回文本的样式和区域设置。

      如果找不到文本映射,则返回数字值

      参数:
      style - 所需文本的长度,非null
      locale - 要使用的区域设置,非null
      返回:
      月份的文本值,非null
    • isSupported

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

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

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

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

      在接口中由指定:
      isSupported in interface 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)
      返回此月份之前指定月份数的月份。

      计算从1月到12月年初的循环。指定的周期可以为负数。

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

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

      public int length(boolean leapYear)
      获取此月份的天数长度。

      此方法接受一个标志,用于确定是否返回闰年的长度。

      标准年份的2月有28天,闰年有29天。4月、6月、9月和11月有30天。所有其他月份有31天。

      参数:
      leapYear - 如果需要闰年的长度
      返回:
      此月份的天数长度,从28到31
    • minLength

      public int minLength()
      获取此月份的最小天数长度。

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

      返回:
      此月份的最小天数长度,从28到31
    • maxLength

      public int maxLength()
      获取此月份的最大天数长度。

      2月的最大长度为29天。4月、6月、9月和11月有30天。所有其他月份有31天。

      返回:
      此月份的最大天数长度,从29到31
    • firstDayOfYear

      public int firstDayOfYear(boolean leapYear)
      获取与此月份第一天对应的一年中的天数。

      使用闰年标志确定2月的长度,返回此月份开始的一年中的天数。

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

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

      一年可以分为四个季度。此方法返回基准月份所在季度的第一个月。1月、2月和3月返回1月。4月、5月和6月返回4月。7月、8月和9月返回7月。10月、11月和12月返回10月。

      返回:
      与此月份对应的季度的第一个月,不能为空
    • 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)来反转调用模式更清晰:

         // 这两行是等效的,但推荐第二种方法
         temporal = thisMonth.adjustInto(temporal);
         temporal = temporal.with(thisMonth);
       

      例如,给定五月份的日期,以下是输出:

         dateInMay.with(JANUARY);    // 提前四个月
         dateInMay.with(APRIL);      // 提前一个月
         dateInMay.with(MAY);        // 同一日期
         dateInMay.with(JUNE);       // 推迟一个月
         dateInMay.with(DECEMBER);   // 推迟七个月
       

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

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