- 所有已实现的接口:
-
Serializable
,Comparable<MonthDay>
,TemporalAccessor
,TemporalAdjuster
--12-03
。
MonthDay
是一个不可变的日期时间对象,表示月份和日期的组合。可以获取从月份和日期派生的任何字段,例如季度。
此类不存储或表示年份、时间或时区。例如,值“12月3日”可以存储在MonthDay
中。
由于MonthDay
不包含年份,因此2月29日的闰年日被视为有效。
此类实现了TemporalAccessor
而不是Temporal
。这是因为在没有外部信息的情况下无法定义2月29日是否有效,从而阻止了加法/减法的实现。相关联的是,MonthDay
仅提供访问查询和设置字段MONTH_OF_YEAR
和DAY_OF_MONTH
的功能。
ISO-8601日历系统是当今世界大部分地区使用的现代公民日历系统。它等同于先行格里高利历日历系统,其中适用于所有时间的闰年规则。对于今天编写的大多数应用程序,ISO-8601规则完全适用。但是,任何使用历史日期并要求其准确的应用程序将发现ISO-8601方法不适用。
这是一个基于值的类;程序员应将相等的实例视为可互换,并且不应将实例用于同步,否则可能会发生不可预测的行为。例如,在将来的版本中,同步可能会失败。应使用equals
方法进行比较。
- 实现要求:
- 此类是不可变的且线程安全的。
- 自:
- 1.8
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionadjustInto
(Temporal temporal) 调整指定的时间对象以具有此月日。atYear
(int year) 将此月日与年份组合以创建一个LocalDate
。int
将此月日与另一个月日进行比较。boolean
检查此月日是否等于另一个月日。format
(DateTimeFormatter formatter) 使用指定的格式化程序格式化此月日。static MonthDay
from
(TemporalAccessor temporal) 从时间对象获取MonthDay
的实例。int
get
(TemporalField field) 从此月日获取指定字段的值作为int
。int
获取日期字段的值。long
getLong
(TemporalField field) 从此月日获取指定字段的值作为long
。getMonth()
使用Month
枚举获取年份字段。int
获取从1到12的年份字段。int
hashCode()
此月日的哈希码。boolean
检查此月日是否在指定的月日之后。boolean
检查此月日是否在指定的月日之前。boolean
isSupported
(TemporalField field) 检查是否支持指定字段。boolean
isValidYear
(int year) 检查此月日的年份是否有效。static MonthDay
now()
从默认时区的系统时钟获取当前月日。static MonthDay
从指定时钟获取当前月日。static MonthDay
从指定时区的系统时钟获取当前月日。static MonthDay
of
(int month, int dayOfMonth) 获取MonthDay
的实例。static MonthDay
获取MonthDay
的实例。static MonthDay
parse
(CharSequence text) 从文本字符串(例如--12-03
)获取MonthDay
的实例。static MonthDay
parse
(CharSequence text, DateTimeFormatter formatter) 使用特定格式化程序从文本字符串获取MonthDay
的实例。<R> R
query
(TemporalQuery<R> query) 使用指定查询查询此月日。range
(TemporalField field) 获取指定字段的有效值范围。toString()
将此月日输出为String
,例如--12-03
。返回具有更改后的年份的此MonthDay
的副本。withDayOfMonth
(int dayOfMonth) 返回具有更改后的日期的此MonthDay
的副本。withMonth
(int month) 返回具有更改后的年份的此MonthDay
的副本。
-
Method Details
-
now
从默认时区的系统时钟获取当前月日。这将查询默认时区中的
系统时钟
以获取当前月日。使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。
- 返回:
- 使用系统时钟和默认时区获取当前月日,不为null
-
now
从指定时区的系统时钟获取当前月日。这将查询
系统时钟
以获取当前月日。指定时区可避免依赖默认时区。使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。
- 参数:
-
zone
- 要使用的区域ID,不为null - 返回:
- 使用系统时钟获取当前月日,不为null
-
now
从指定时钟获取当前月日。这将查询指定的时钟以获取当前月日。使用此方法允许使用替代时钟进行测试。可以使用
依赖注入
引入替代时钟。- 参数:
-
clock
- 要使用的时钟,不为null - 返回:
- 当前月日,不为null
-
of
获取MonthDay
的实例。日期必须在闰年内对应的月份有效。因此,对于2月,29日是有效的。
例如,传入4月和31日将引发异常,因为任何年份中都不可能有4月31日。相比之下,传入2月29日是允许的,因为该月日有时是有效的。
- 参数:
-
month
- 要表示的年份,不为null -
dayOfMonth
- 要表示的日期,从1到31 - 返回:
- 月日,不为null
- 抛出:
-
DateTimeException
- 如果任何字段的值超出范围,或者日期对于该月份无效
-
of
获取MonthDay
的实例。日期必须在闰年内对应的月份有效。因此,对于2月(February),29日是有效的。
例如,传入月份4(April)和日期31将引发异常,因为任何年份中都不可能有4月31日。相比之下,传入2月29日是允许的,因为该月日有时是有效的。
- 参数:
-
month
- 要表示的年份,从1(一月)到12(十二月) -
dayOfMonth
- 要表示的日期,从1到31 - 返回:
- 月日,不为null
- 抛出:
-
DateTimeException
- 如果任何字段的值超出范围,或者日期对于该月份无效
-
from
从时间对象获取MonthDay
的实例。根据指定的时间获取一个月日。
TemporalAccessor
表示一组任意的日期和时间信息,此工厂将其转换为MonthDay
的实例。转换提取
MONTH_OF_YEAR
和DAY_OF_MONTH
字段。只有在时间对象具有ISO年表,或者可以转换为LocalDate
时才允许提取。此方法与函数接口
TemporalQuery
的签名匹配,允许通过方法引用MonthDay::from
来使用它作为查询。- 参数:
-
temporal
- 要转换的时间对象,不为null - 返回:
- 月日,不为null
- 抛出:
-
DateTimeException
- 如果无法转换为MonthDay
-
parse
从文本字符串(例如--12-03
)获取MonthDay
的实例。字符串必须表示有效的月日。格式为
--MM-dd
。- 参数:
-
text
- 要解析的文本,例如“--12-03”,不为null - 返回:
- 解析的月日,不为null
- 抛出:
-
DateTimeParseException
- 如果无法解析文本
-
parse
使用特定格式化程序从文本字符串获取MonthDay
的实例。使用格式化程序解析文本,返回一个月日。
- 参数:
-
text
- 要解析的文本,不为null -
formatter
- 要使用的格式化程序,不为null - 返回:
- 解析的月日,不为null
- 抛出:
-
DateTimeParseException
- 如果无法解析文本
-
isSupported
检查指定字段是否受支持。这将检查是否可以查询指定字段的这个月-日。如果为false,则调用
range
和get
方法将抛出异常。如果字段是一个
ChronoField
,则在此处实现查询。支持的字段包括:MONTH_OF_YEAR
YEAR
ChronoField
实例将返回false。如果字段不是
ChronoField
,则通过将this
作为参数传递给TemporalField.isSupportedBy(TemporalAccessor)
来获取此方法的结果。字段是否受支持由字段决定。- 指定者:
-
isSupported
在接口TemporalAccessor
- 参数:
-
field
- 要检查的字段,null返回false - 返回:
- 如果此月-日支持该字段,则为true,否则为false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。此月-日用于增强返回范围的准确性。如果无法返回范围,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将返回适当的范围实例。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过将this
作为参数传递给TemporalField.rangeRefinedBy(TemporalAccessor)
来获取此方法的结果。是否可以获取范围由字段决定。- 指定者:
-
range
在接口TemporalAccessor
- 参数:
-
field
- 要查询范围的字段,不能为空 - 返回:
- 字段的有效值范围,不能为空
- 抛出:
-
DateTimeException
- 如果无法获取字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
从此月-日获取指定字段的值作为int
。查询此月-日以获取指定字段的值。返回的值将始终在字段的有效值范围内。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将根据此月-日返回有效值。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过将this
作为参数传递给TemporalField.getFrom(TemporalAccessor)
来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
get
在接口TemporalAccessor
- 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值或值超出字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值范围超出int
-
ArithmeticException
- 如果发生数值溢出
-
getLong
从此月-日获取指定字段的值作为long
。查询此月-日以获取指定字段的值。如果无法返回值,因为不支持该字段或出于其他原因,将抛出异常。
如果字段是一个
ChronoField
,则在此处实现查询。支持的字段
将根据此月-日返回有效值。所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果字段不是
ChronoField
,则通过将this
作为参数传递给TemporalField.getFrom(TemporalAccessor)
来获取此方法的结果。是否可以获取值以及值代表什么由字段决定。- 指定者:
-
getLong
在接口TemporalAccessor
- 参数:
-
field
- 要获取的字段,不能为空 - 返回:
- 字段的值
- 抛出:
-
DateTimeException
- 如果无法获取字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数值溢出
-
getMonthValue
public int getMonthValue()获取月份字段从1到12。此方法将月份作为
int
从1到12返回。通过调用getMonth()
使用枚举Month
,应用代码通常更清晰。- 返回:
- 月份,从1到12
- 参见:
-
getMonth
- 返回:
- 月份,不能为空
- 参见:
-
getDayOfMonth
public int getDayOfMonth()获取月份字段的日期。此方法返回日期的基本
int
值。- 返回:
- 日期,从1到31
-
isValidYear
public boolean isValidYear(int year) 检查该月-日是否对应于指定年份。此方法检查该月和日以及输入年份是否形成有效日期。仅当为2月29日时才会返回false。
- 参数:
-
year
- 要验证的年份 - 返回:
- 如果该年份对应于该月-日,则为true
- 参见:
-
withMonth
返回具有更改月份字段的MonthDay
的副本。返回具有指定月份的月-日。如果指定月份的日期无效,则日期将调整为该月的最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
month
- 要在返回的月-日中设置的月份,从1(一月)到12(十二月) - 返回:
-
基于此月-日的具有请求月份的
MonthDay
,不能为空 - 抛出:
-
DateTimeException
- 如果月份值无效
-
with
返回具有更改月份字段的MonthDay
的副本。返回具有指定月份的月-日。如果指定月份的日期无效,则日期将调整为该月的最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
month
- 要在返回的月-日中设置的月份,不能为空 - 返回:
-
基于此月-日的具有请求月份的
MonthDay
,不能为空
-
withDayOfMonth
返回具有更改日期字段的MonthDay
的副本。返回具有指定日期的月-日。如果日期对于该月份无效,则抛出异常。
此实例是不可变的,不受此方法调用的影响。
- 参数:
-
dayOfMonth
- 要设置在返回月日中的日,从1到31 - 返回:
-
基于此月日的
MonthDay
,具有请求的日,不为null - 抛出:
-
DateTimeException
- 如果日值无效,或者如果日对于该月份无效
-
query
使用指定的查询查询此月日。使用指定的查询策略对象查询此月日。
TemporalQuery
对象定义要用于获取结果的逻辑。阅读查询的文档以了解此方法的结果将是什么。此方法的结果是通过在指定的查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法并将this
作为参数传递来获得的。- 指定者:
-
query
在接口TemporalAccessor
- 类型参数:
-
R
- 结果的类型 - 参数:
-
query
- 要调用的查询,不为null - 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数值溢出(由查询定义)
-
adjustInto
调整指定的时间对象以具有此月日。返回与输入具有相同可观察类型的时间对象,其中月和日更改为与此相同。
该调整等效于两次使用
Temporal.with(TemporalField, long)
,传递ChronoField.MONTH_OF_YEAR
和ChronoField.DAY_OF_MONTH
作为字段。如果指定的时间对象不使用ISO日历系统,则会抛出DateTimeException
。在大多数情况下,通过使用
Temporal.with(TemporalAdjuster)
来反转调用模式更清晰:// 这两行是等效的,但推荐第二种方法 temporal = thisMonthDay.adjustInto(temporal); temporal = temporal.with(thisMonthDay);
此实例是不可变的,并且不受此方法调用的影响。
- 指定者:
-
adjustInto
在接口TemporalAdjuster
- 参数:
-
temporal
- 要调整的目标对象,不为null - 返回:
- 调整后的对象,不为null
- 抛出:
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数值溢出
-
format
使用指定的格式化程序格式化此月日。此月日将传递给格式化程序以生成一个字符串。
- 参数:
-
formatter
- 要使用的格式化程序,不为null - 返回:
- 格式化的月日字符串,不为null
- 抛出:
-
DateTimeException
- 如果在打印过程中发生错误
-
atYear
将此月日与年份组合以创建一个LocalDate
。从此月日和指定年份形成一个
LocalDate
。如果年份不是闰年,则2月29日将调整为结果日期中的2月28日。
此实例是不可变的,并且不受此方法调用的影响。
- 参数:
-
year
- 要使用的年份,从MIN_YEAR到MAX_YEAR - 返回:
- 从此月日和指定年份形成的本地日期,不为null
- 抛出:
-
DateTimeException
- 如果年份超出有效年份范围
-
compareTo
将此月日与另一个月日进行比较。比较首先基于月的值,然后基于日的值。它是“与equals一致”的,如
Comparable
定义的。- 指定者:
-
compareTo
在接口Comparable<MonthDay>
- 参数:
-
other
- 要比较的另一个月日,不为null - 返回:
-
比较器值,如果此在
other
之前,则小于零,如果它们相等,则为零,如果此在other
之后,则大于零 - 参见:
-
isAfter
检查此月日是否在指定的月日之后。- 参数:
-
other
- 要比较的另一个月日,不为null - 返回:
- 如果此在指定的月日之后,则为true
-
isBefore
检查此月日是否在指定的月日之前。- 参数:
-
other
- 要比较的另一个月日,不为null - 返回:
- 如果此点在指定的月日之前,则为true
-
equals
检查此月日是否等于另一个月日。比较基于年内月日的时间线位置。
-
hashCode
public int hashCode()此月日的哈希码。 -
toString
将此月日输出为String
,例如--12-03
。输出将以
--MM-dd
的格式:
-