- 所有已实现的接口:
-
Serializable
,Comparable<Month>
,Constable
,TemporalAccessor
,TemporalAdjuster
Month
是一个枚举,代表一年中的12个月 - 一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月和十二月。
除了文本枚举名称外,每个月份都有一个int
值。该int
值遵循常规用法和ISO-8601标准,从1(一月)到12(十二月)。建议应用程序使用枚举而不是int
值,以确保代码清晰度。
不要使用ordinal()
来获取Month
的数字表示。请改用getValue()
。
此枚举表示许多日历系统中常见的概念。因此,任何具有与ISO-8601日历系统完全相同的年月概念定义的日历系统都可以使用此枚举。
- 实现要求:
- 这是一个不可变且线程安全的枚举。
- 自版本:
- 1.8
-
Nested Class Summary
Nested classes/interfaces declared in class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
Enum Constant Summary
-
Method Summary
Modifier and TypeMethodDescriptionadjustInto
(Temporal temporal) 调整指定的时间对象,使其具有这个月份。int
firstDayOfYear
(boolean leapYear) 获取这个月份第一天对应的一年中的第几天。获取这个季度的第一个月对应的月份。static Month
from
(TemporalAccessor temporal) 从一个时间对象获取Month
的实例。int
get
(TemporalField field) 以int
形式获取这个月份的指定字段的值。getDisplayName
(TextStyle style, Locale locale) 获取文本表示,如'一月'或'十二月'。long
getLong
(TemporalField field) 以long
形式获取这个月份的指定字段的值。int
getValue()
获取月份的int
值。boolean
isSupported
(TemporalField field) 检查是否支持指定的字段。int
length
(boolean leapYear) 获取这个月份的长度(以天为单位)。int
获取这个月份的最大长度(以天为单位)。int
获取这个月份的最小长度(以天为单位)。minus
(long months) 返回比当前月份早指定月份数的月份。static Month
of
(int month) 从int
值获取Month
的实例。plus
(long months) 返回比当前月份晚指定月份数的月份。<R> R
query
(TemporalQuery<R> query) 使用指定的查询查询这个月份。range
(TemporalField field) 获取指定字段的有效值范围。static Month
返回具有指定名称的此类的枚举常量。static Month[]
values()
返回包含此枚举类的常量的数组,按照它们声明的顺序。
-
Enum Constant Details
-
JANUARY
一月的单例实例,有31天。其数字值为1
。 -
FEBRUARY
二月的单例实例,在闰年中有29天,否则为28天。其数字值为2
。 -
MARCH
三月的单例实例,有31天。其数字值为3
。 -
APRIL
四月的单例实例,有30天。其数字值为4
。 -
MAY
五月的单例实例,有31天。其数字值为5
。 -
JUNE
六月的单例实例,有30天。其数字值为6
。 -
JULY
七月的单例实例,有31天。其数字值为7
。 -
AUGUST
八月的单例实例,有31天。其数字值为8
。 -
SEPTEMBER
九月的单例实例,有30天。其数字值为9
。 -
OCTOBER
十月的单例实例,有31天。其数字值为10
。 -
NOVEMBER
十一月的单例实例,有30天。其数字值为11
。 -
DECEMBER
十二月的单例实例,有31天。其数字值为12
。
-
-
Method Details
-
values
返回包含此枚举类的常量的数组,按照它们声明的顺序。- 返回:
- 包含此枚举类的常量的数组,按照它们声明的顺序
-
valueOf
返回具有指定名称的此类的枚举常量。字符串必须与此类中用于声明枚举常量的标识符完全匹配。(不允许存在多余的空格字符。)- 参数:
-
name
- 要返回的枚举常量的名称。 - 返回:
- 具有指定名称的枚举常量
- 抛出:
-
IllegalArgumentException
- 如果此枚举类没有具有指定名称的常量 -
NullPointerException
- 如果参数为null
-
of
从int
值获取Month
的实例。Month
是一个枚举,代表一年中的12个月。此工厂允许从int
值获取枚举。该int
值遵循ISO-8601标准,从1(一月)到12(十二月)。- 参数:
-
month
- 要表示的月份,从1(一月)到12(十二月) - 返回:
- 月份,非null
- 抛出:
-
DateTimeException
- 如果月份无效
-
from
从一个时间对象获取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
获取文本表示,如'一月'或'十二月'。返回用于标识月份的文本名称,适合向用户展示。参数控制返回文本的样式和区域设置。
如果找不到文本映射,则返回
数字值
。- 参数:
-
style
- 所需文本的长度,非null -
locale
- 要使用的区域设置,非null - 返回:
- 月份的文本值,非null
-
isSupported
检查是否支持指定的字段。检查此月份是否可以查询指定字段。如果为false,则调用
range
和get
方法将抛出异常。如果字段是
MONTH_OF_YEAR
,则此方法返回true。所有其他ChronoField
实例将返回false。如果字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数来获取此方法的结果。字段是否受支持取决于字段。- 在接口中由指定:
-
isSupported
in interfaceTemporalAccessor
- 参数:
-
field
- 要检查的字段,null返回false - 返回:
- 如果此月份支持该字段,则为true,否则为false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。此月用于增强返回范围的准确性。如果无法返回范围,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是
MONTH_OF_YEAR
,则将返回月份的范围,从1到12。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。范围是否可以获取取决于字段。- 指定者:
-
range
在接口TemporalAccessor
- 参数:
-
field
- 要查询范围的字段,不能为空 - 返回:
- 字段的有效值范围,不能为空
- 抛出:
-
DateTimeException
- 如果无法获取字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
以int
形式获取此月份的指定字段的值。查询此月份的指定字段的值。返回的值始终在字段的有效值范围内。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是
MONTH_OF_YEAR
,则将返回月份的值,从1到12。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
get
在接口TemporalAccessor
- 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值,在有效值范围内
- 抛出:
-
DateTimeException
- 如果无法获取字段的值或值超出字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值范围超过int
-
ArithmeticException
- 如果发生数值溢出
-
getLong
以long
形式获取此月份的指定字段的值。查询此月份的指定字段的值。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是
MONTH_OF_YEAR
,则将返回月份的值,从1到12。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过调用TemporalField.getFrom(TemporalAccessor)
并将this
作为参数传递来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
getLong
在接口TemporalAccessor
- 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数值溢出
-
plus
返回此月份之后指定月份数的月份。计算从12月到1月年末的循环。指定的周期可以为负数。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
months
- 要添加的月份数,可以为正数或负数 - 返回:
- 结果月份,不能为空
-
minus
返回此月份之前指定月份数的月份。计算从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
获取与此季度的第一个月对应的月份。一年可以分为四个季度。此方法返回基准月份所在季度的第一个月。1月、2月和3月返回1月。4月、5月和6月返回4月。7月、8月和9月返回7月。10月、11月和12月返回10月。
- 返回:
- 与此月份对应的季度的第一个月,不能为空
-
query
使用指定的查询对此月份进行查询。使用指定的查询策略对象对此月份进行查询。
TemporalQuery
对象定义要用于获取结果的逻辑。阅读查询的文档以了解此方法的结果。通过在指定的查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法并传递this
作为参数来获取此方法的结果。- 指定者:
-
query
在接口TemporalAccessor
- 类型参数:
-
R
- 结果的类型 - 参数:
-
query
- 要调用的查询,不能为空 - 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数值溢出(由查询定义)
-
adjustInto
调整指定的时间对象以使其具有这个月份。返回一个与输入相同可观察类型的时间对象,其中月份被更改为与此相同。
该调整等同于使用
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
- 如果发生数值溢出
-