- java.lang.Object
-
- java.time.MonthDay
-
- 实现的所有接口
-
Serializable
,Comparable<MonthDay>
,TemporalAccessor
,TemporalAdjuster
public final class MonthDay extends Object implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
ISO---12-03
- 日,例如--12-03
。MonthDay
是一个不可变的日期时间对象,表示月份和日期的组合。 可以获得可以从一个月和一天获得的任何字段,例如四分之一年。此课程不存储或代表年份,时间或时区。 例如,值“December 3rd”可以存储在
MonthDay
。由于
MonthDay
没有一年,因此2月29日的闰日被认为是有效的。此类实现
TemporalAccessor
而不是Temporal
。 这是因为无法在没有外部信息的情况下定义2月29日是否有效,从而阻止执行正/负。 与此相关,MonthDay
仅提供对查询的访问并设置字段MONTH_OF_YEAR
和DAY_OF_MONTH
。ISO-8601日历系统是当今世界大部分地区使用的现代民用日历系统。 它等同于公历的格里高利历法系统,其中今天的闰年规则一直适用。 对于今天编写的大多数应用程序,ISO-8601规则是完全合适的。 但是,任何使用历史日期并要求它们准确的应用程序都会发现ISO-8601方法不合适。
这是一个value-based班; 在
MonthDay
实例上使用身份敏感操作(包括引用相等(==
),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。 应使用equals
方法进行比较。- 实现要求:
- 这个类是不可变的和线程安全的。
- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 Temporal
adjustInto(Temporal temporal)
调整指定的时间对象以具有此月 - 日。LocalDate
atYear(int year)
将这个月和一年结合起来创建一个LocalDate
。int
compareTo(MonthDay other)
将这个月份的日期与另一个月份的日期进行比较。boolean
equals(Object obj)
检查此月 - 日是否等于另一个月 - 日。String
format(DateTimeFormatter formatter)
使用指定的格式化程序在本月创建格式。static MonthDay
from(TemporalAccessor temporal)
从时态对象获得MonthDay
的实例。int
get(TemporalField field)
从此月 - 日获取指定字段的值,作为int
。int
getDayOfMonth()
获取日期字段。long
getLong(TemporalField field)
从此月 - 日获取指定字段的值,作为long
。Month
getMonth()
使用Month
枚举获取年份字段。int
getMonthValue()
获取1到12之间的月份字段。int
hashCode()
这个月的哈希码。boolean
isAfter(MonthDay other)
检查此月 - 日是否在指定的月 - 日之后。boolean
isBefore(MonthDay other)
检查此月 - 日是否在指定的月 - 日之前。boolean
isSupported(TemporalField field)
检查是否支持指定的字段。boolean
isValidYear(int year)
检查年份是否适用于本月。static MonthDay
now()
从默认时区中的系统时钟获取当前月 - 日。static MonthDay
now(Clock clock)
从指定的时钟获得当前的月 - 日。static MonthDay
now(ZoneId zone)
从指定时区的系统时钟获取当前月 - 日。static MonthDay
of(int month, int dayOfMonth)
获得MonthDay
的实例。static MonthDay
of(Month month, int dayOfMonth)
获得MonthDay
的实例。static MonthDay
parse(CharSequence text)
从文本字符串(如--12-03
获取MonthDay
的实例。static MonthDay
parse(CharSequence text, DateTimeFormatter formatter)
使用特定格式化程序从文本字符串中获取MonthDay
的实例。<R> R
query(TemporalQuery<R> query)
使用指定的查询查询本月 - 日。ValueRange
range(TemporalField field)
获取指定字段的有效值范围。String
toString()
本月的输出为String
,例如--12-03
。MonthDay
with(Month month)
返回此MonthDay
的副本,其中年份已更改。MonthDay
withDayOfMonth(int dayOfMonth)
返回此MonthDay
的副本,并更改日期。MonthDay
withMonth(int month)
返回此MonthDay
的副本,其中年份已更改。
-
-
-
方法详细信息
-
now
public static MonthDay now()
- 结果
- 使用系统时钟和默认时区的当前月 - 日,不为空
-
now
public static MonthDay now(Clock clock)
从指定的时钟获得当前的月 - 日。这将查询指定的时钟以获取当前的月 - 日。 使用此方法允许使用备用时钟进行测试。 可以使用
dependency injection
引入备用时钟。- 参数
-
clock
- 要使用的时钟,不为空 - 结果
- 当前的月 - 日,而不是空
-
of
public static MonthDay of(Month month, int dayOfMonth)
获得MonthDay
的实例。月份必须在闰年内有效。 因此,对于二月,第29天是有效的。
例如,4月和31日的通过会引发异常,因为任何一年都不可能有4月31日。 相比之下,允许在2月29日过去,因为该月日有时是有效的。
- 参数
-
month
- 表示的月份而非空值 -
dayOfMonth
- 表示的日期,从1到31 - 结果
- 月 - 日,不是空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月份的月份无效
-
of
public static MonthDay of(int month, int dayOfMonth)
获得MonthDay
的实例。月份必须在闰年内有效。 因此,对于第2个月(2月),第29天是有效的。
例如,在第4个月(4月)和第31天过去会抛出异常,因为任何一年都不可能有4月31日。 相比之下,允许在2月29日过去,因为该月日有时是有效的。
- 参数
-
month
- 表示从1(1月)到12(12月)的月份 -
dayOfMonth
- 表示的日期,从1到31 - 结果
- 月 - 日,不是空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月份的月份无效
-
from
public static MonthDay from(TemporalAccessor temporal)
从时态对象获得MonthDay
的实例。这将根据指定的时间获得一个月 - 日。
TemporalAccessor
表示一组任意日期和时间信息,该工厂将其转换为MonthDay
的实例。转换提取
MONTH_OF_YEAR
和DAY_OF_MONTH
字段。 仅当时态对象具有ISO年表,或者可以转换为LocalDate
,才允许提取。该方法匹配功能接口
TemporalQuery
的签名,允许其通过方法参考MonthDay::from
用作查询。- 参数
-
temporal
- 要转换的临时对象,而不是null - 结果
- 月 - 日,不是空
- 异常
-
DateTimeException
- 如果无法转换为MonthDay
-
parse
public static MonthDay parse(CharSequence text)
从文本字符串(如--12-03
获取MonthDay
的实例。该字符串必须代表有效的月 - 日。 格式为
--MM-dd
。- 参数
-
text
- 要解析的文本,例如“--12-03”,而不是null - 结果
- 解析的月 - 日,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
parse
public static MonthDay parse(CharSequence text, DateTimeFormatter formatter)
使用特定格式化程序从文本字符串中获取MonthDay
的实例。使用格式化程序解析文本,返回一个月的日期。
- 参数
-
text
- 要解析的文本,而不是null -
formatter
- 要使用的格式化程序,不为null - 结果
- 解析的月 - 日,而不是null
- 异常
-
DateTimeParseException
- 如果无法解析文本
-
isSupported
public boolean isSupported(TemporalField field)
检查是否支持指定的字段。这将检查是否可以查询指定字段的月份日。 如果为false,则调用
range
和get
方法将引发异常。如果该字段是
ChronoField
,则在此处执行查询。 支持的字段是:-
MONTH_OF_YEAR
-
YEAR
ChronoField
实例将返回false。如果该字段不是
ChronoField
,则通过调用TemporalField.isSupportedBy(TemporalAccessor)
传递this
作为参数来获得此方法的结果。 字段是否受支持由字段确定。- Specified by:
-
isSupported
在界面TemporalAccessor
- 参数
-
字段
- 要检查的字段,null返回false - 结果
- 如果该字段在此月份日受支持,则为true,否则为false
-
-
range
public ValueRange range(TemporalField field)
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。 此月 - 日用于提高返回范围的准确性。 如果无法返回范围,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。supported fields
将返回适当的范围实例。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段不是
ChronoField
,则通过调用this
作为参数调用TemporalField.rangeRefinedBy(TemporalAccessor)
获得此方法的结果。 是否可以获得范围由该字段确定。- Specified by:
-
range
在界面TemporalAccessor
- 参数
-
字段
- 要查询范围的字段,而不是null - 结果
- 字段的有效值范围,不为null
- 异常
-
DateTimeException
- 如果无法获得该字段的范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段
-
get
public int get(TemporalField field)
从int
获取此月 - 日指定字段的值。这将在本月的日期查询指定字段的值。 返回的值将始终在该字段的有效值范围内。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。supported fields
将根据此月 - 日返回有效值。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)
传递this
作为参数。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
get
,界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获取该字段的值或该值超出该字段的有效值范围 -
UnsupportedTemporalTypeException
- 如果不支持该字段或值的范围超过int
-
ArithmeticException
- 如果发生数字溢出
-
getLong
public long getLong(TemporalField field)
从long
获取此月 - 日的指定字段的值。这将在本月的日期查询指定字段的值。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。
如果该字段是
ChronoField
,则在此处执行查询。supported fields
将根据此月 - 日返回有效值。 所有其他ChronoField
实例将抛出UnsupportedTemporalTypeException
。如果该字段不是
ChronoField
,则通过调用this
作为参数调用TemporalField.getFrom(TemporalAccessor)
获得此方法的结果。 是否可以获得该值以及该值表示的值由该字段确定。- Specified by:
-
getLong
在界面TemporalAccessor
- 参数
-
字段
- 要获取的字段,而不是null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获得该字段的值 -
UnsupportedTemporalTypeException
- 如果不支持该字段 -
ArithmeticException
- 如果发生数字溢出
-
getMonthValue
public int getMonthValue()
获取1到12之间的月份字段。此方法将月份作为
int
从1返回到12.如果通过调用getMonth()
使用枚举Month
,则应用程序代码通常更清晰。- 结果
- 月份,从1到12
- 另请参见:
-
getMonth()
-
getMonth
public Month getMonth()
- 结果
- 一年中的月份,不是空的
- 另请参见:
-
getMonthValue()
-
getDayOfMonth
public int getDayOfMonth()
获取日期字段。此方法返回日期的原始值
int
。- 结果
- 每月,从1到31
-
isValidYear
public boolean isValidYear(int year)
检查年份是否适用于本月。此方法检查此月份和日期以及输入年份是否构成有效日期。 这只能在2月29日返回false。
- 参数
-
year
- 验证的一年 - 结果
- 如果年份对于本月 - 日有效,则为true
- 另请参见:
-
Year.isValidMonthDay(MonthDay)
-
withMonth
public MonthDay withMonth(int month)
返回此MonthDay
的副本,其中年份已更改。这将返回指定月份的月 - 日。 如果指定月份的日期无效,则该日期将调整为最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
month
- 在返回的月份日中设置的月份,从1(1月)到12(12月) - 结果
-
a
MonthDay
基于此月份的请求月份,不为空 - 异常
-
DateTimeException
- 如果月份值无效
-
with
public MonthDay with(Month month)
返回此MonthDay
的副本,其中年份已更改。这将返回指定月份的月 - 日。 如果指定月份的日期无效,则该日期将调整为最后一个有效日期。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
month
- 在返回的月 - 日中设置的月份,而不是null - 结果
-
基于此月 - 日的请求月份的
MonthDay
,不为空
-
withDayOfMonth
public MonthDay withDayOfMonth(int dayOfMonth)
返回此MonthDay
的副本,并更改日期。这将返回指定日期的月 - 日。 如果该月的日期无效,则会引发异常。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
dayOfMonth
- 在返回月 - 日中设置的日期,从1到31 - 结果
-
a
MonthDay
基于此请求日的当月,不为空 - 异常
-
DateTimeException
- 如果日期值无效,或者月中的某一天无效
-
query
public <R> R query(TemporalQuery<R> query)
使用指定的查询查询本月 - 日。这将使用指定的查询策略对象在本月查询。
TemporalQuery
对象定义用于获取结果的逻辑。 阅读查询文档以了解此方法的结果。通过在指定的查询上调用
TemporalQuery.queryFrom(TemporalAccessor)
方法作为参数传递this
来获得此方法的结果。- Specified by:
-
query
in interfaceTemporalAccessor
- 参数类型
-
R
- 结果的类型 - 参数
-
query
- 要调用的查询,而不是null - 结果
- 查询结果,可以返回null(由查询定义)
- 异常
-
DateTimeException
- 如果无法查询(由查询定义) -
ArithmeticException
- 如果发生数字溢出(由查询定义)
-
adjustInto
public Temporal adjustInto(Temporal temporal)
调整指定的时间对象以具有此月 - 日。这将返回与输入相同的可观察类型的时间对象,其中月份和日期更改为与此相同。
调整相当于使用
Temporal.with(TemporalField, long)
两次,通过ChronoField.MONTH_OF_YEAR
和ChronoField.DAY_OF_MONTH
作为字段。 如果指定的时态对象不使用ISO日历系统,则抛出DateTimeException
。在大多数情况下,使用
Temporal.with(TemporalAdjuster)
更清楚地反转调用模式:// these two lines are equivalent, but the second approach is recommended temporal = thisMonthDay.adjustInto(temporal); temporal = temporal.with(thisMonthDay);
此实例是不可变的,不受此方法调用的影响。
- Specified by:
-
adjustInto
in界面TemporalAdjuster
- 参数
-
temporal
- 要调整的目标对象,而不是null - 结果
- 调整后的对象,不为空
- 异常
-
DateTimeException
- 如果无法进行调整 -
ArithmeticException
- 如果发生数字溢出
-
format
public String format(DateTimeFormatter formatter)
使用指定的格式化程序在本月创建格式。此月 - 日将传递给格式化程序以生成字符串。
- 参数
-
formatter
- 要使用的格式化程序,而不是null - 结果
- 格式化的月 - 日字符串,不为空
- 异常
-
DateTimeException
- 如果在打印期间发生错误
-
atYear
public LocalDate atYear(int year)
将这个月和一年结合起来创建一个LocalDate
。这将返回从该月和指定年份形成的
LocalDate
。如果年份不是闰年,则2月29日的月份将在结果日期调整为2月28日。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
year
- 使用年份,从MIN_YEAR到MAX_YEAR - 结果
- 从该月 - 日和指定年份形成的本地日期,不为空
- 异常
-
DateTimeException
- 如果年份超出有效年限范围
-
compareTo
public int compareTo(MonthDay other)
将这个月份的日期与另一个月份的日期进行比较。比较首先基于月份的值,然后基于当天的值。 它与“等于”一致,如
Comparable
所定义。- Specified by:
-
compareTo
在界面Comparable<MonthDay>
- 参数
-
other
- 要比较的其他月份日,而不是null - 结果
- 比较器值,如果更小则为负,如果更大则为正
-
isAfter
public boolean isAfter(MonthDay other)
检查此月 - 日是否在指定的月 - 日之后。- 参数
-
other
- 要比较的其他月份日,而不是null - 结果
- 如果这是在指定的月 - 日之后,则为true
-
isBefore
public boolean isBefore(MonthDay other)
检查此月 - 日是否在指定的月 - 日之前。- 参数
-
other
- 要比较的其他月份日,而不是null - 结果
- 如果此点在指定的月 - 日之前,则为true
-
equals
public boolean equals(Object obj)
检查此月 - 日是否等于另一个月 - 日。比较基于一年中一个月中的时间线位置。
- 重写:
-
equals
在课程Object
- 参数
-
obj
- 要检查的对象,null返回false - 结果
- 如果这等于另一个月 - 日,则为true
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
这个月的哈希码。- 重写:
-
hashCode
in classObject
- 结果
- 合适的哈希码
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-