- 所有已实现的接口:
-
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
Enum Constants -
Method Summary
Modifier and TypeMethodDescriptionadjustInto(Temporal temporal) 调整指定的时间对象,使其具有这个月份。intfirstDayOfYear(boolean leapYear) 获取这个月份第一天对应的一年中的第几天。获取这个季度的第一个月对应的月份。static Monthfrom(TemporalAccessor temporal) 从一个时间对象获取Month的实例。intget(TemporalField field) 以int形式获取这个月份的指定字段的值。getDisplayName(TextStyle style, Locale locale) 获取文本表示,如'一月'或'十二月'。longgetLong(TemporalField field) 以long形式获取这个月份的指定字段的值。intgetValue()获取月份的int值。booleanisSupported(TemporalField field) 检查是否支持指定的字段。intlength(boolean leapYear) 获取这个月份的长度(以天为单位)。int获取这个月份的最大长度(以天为单位)。int获取这个月份的最小长度(以天为单位)。minus(long months) 返回比当前月份早指定月份数的月份。static Monthof(int month) 从int值获取Month的实例。plus(long months) 返回比当前月份晚指定月份数的月份。<R> Rquery(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作为参数来获取此方法的结果。字段是否受支持取决于字段。- 在接口中由指定:
-
isSupportedin 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- 如果发生数值溢出
-