- java.lang.Object
-
- java.time.MonthDay
-
- All Implemented Interfaces:
-
Serializable
,Comparable<MonthDay>
,TemporalAccessor
,TemporalAdjuster
public final class MonthDay extends Object implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
ISO---12-03
,如--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方法不合适。
这是一个value-based课; 对
MonthDay
实例的使用身份敏感操作(包括引用等式(==
),身份哈希代码或同步)可能会产生不可预测的结果,应该避免。equals
方法应用于比较。- 实现要求:
- 这个类是不可变的和线程安全的。
- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 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
的副本,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
的实例。闰年内的月份必须有效。 因此,二月二十九日是有效的。
例如,四月和第三十一日的通行将会引起例外,因为在任何一年都不可能有4月31日。 相比之下,允许在二月二十九日过境,因为这个月日有时是有效的。
- 参数
-
month
- 代表的月份,不为null -
dayOfMonth
- 代表从1到31的月份 - 结果
- 月日,不为空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月的日期对于该月无效
-
of
public static MonthDay of(int month, int dayOfMonth)
获得MonthDay
的实例。闰年内的月份必须有效。 因此,在第2月(2月),第29天有效。
例如,在4月(4月)和第31天通过将会发生例外,因为任何一年都不可能是4月31日。 相比之下,允许在二月二十九日过境,因为这个月日有时是有效的。
- 参数
-
month
- 从1月1日至12日(12月)的月份, -
dayOfMonth
- 代表从1到31的月份 - 结果
- 月日,不为空
- 异常
-
DateTimeException
- 如果任何字段的值超出范围,或者月的日期对于该月无效
-
from
public static MonthDay from(TemporalAccessor temporal)
从时间对象获取一个MonthDay
的实例。这将基于指定的时间获得一个月日。 A
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 - 结果
- 解析的月日,不为空
- 异常
-
DateTimeParseException
- 如果文本无法解析
-
parse
public static MonthDay parse(CharSequence text, DateTimeFormatter formatter)
使用特定的格式化程序从文本字符串获取MonthDay
的实例。使用格式化程序解析文本,返回一个月的日子。
- 参数
-
text
- 要解析的文本,不为空 -
formatter
- 要使用的格式化程序,不为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
- 参数
-
field
- 要检查的字段,null返回false - 结果
- 如果在这个月的日子里支持该字段,则为true,否则为false
-
-
range
public ValueRange range(TemporalField field)
获取指定字段的有效值的范围。范围对象表示字段的最小和最大有效值。 这个月份用于提高返回范围的准确性。 如果不可能返回范围,因为该字段不受支持或出于某种其他原因,则抛出异常。
如果该字段是一个
ChronoField
,那么查询是在这里实现的。supported fields
将返回适当的范围实例。 所有其他ChronoField
实例将抛出一个UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用得到TemporalField.rangeRefinedBy(TemporalAccessor)
传递this
作为参数。 是否可以获得范围由字段确定。- Specified by:
-
range
在接口TemporalAccessor
- 参数
-
field
- 查询范围的字段,不为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
- 参数
-
field
- 要获取的字段,不为null - 结果
- 该字段的值
- 异常
-
DateTimeException
- 如果无法获取字段的值,或者该值超出了该字段的有效值的范围 -
UnsupportedTemporalTypeException
- 如果该字段不受支持或值的范围超过int
-
ArithmeticException
- 如果发生数字溢出
-
getLong
public long getLong(TemporalField field)
从这个月份的日期获取指定字段的值作为long
。这个月的日子会查询指定字段的值。 如果不可能返回值,因为该字段不受支持或出于某种其他原因,则抛出异常。
如果该字段是一个
ChronoField
,那么查询是在这里实现的。supported fields
将根据本月日返回有效值。 所有其他ChronoField
实例将抛出一个UnsupportedTemporalTypeException
。如果该字段是不是一个
ChronoField
,则此方法的结果是通过调用得到TemporalField.getFrom(TemporalAccessor)
传递this
作为参数。 该值是否可以获得,该值代表什么值由该字段决定。- Specified by:
-
getLong
在接口TemporalAccessor
- 参数
-
field
- 要获取的字段,不为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)
检查年份是否适用于本月。此方法检查此月和日以及输入年份是否形成有效日期。 这只能在二月二十九日返回假。
- 参数
-
year
- 验证年份 - 结果
- 如果该年份适用于本月的日期,则为真
- 另请参见:
-
Year.isValidMonthDay(MonthDay)
-
withMonth
public MonthDay withMonth(int month)
返回这个MonthDay
的副本,MonthDay
更改月。这将返回指定月份的一个月日。 如果指定月份的日期无效,则日期将被调整到最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
month
- 从1月(1月)至12月(12月)返回的月日设定的月份 - 结果
-
一个
MonthDay
基于这个月份与请求的月份,不为null - 异常
-
DateTimeException
- 如果月份值无效
-
with
public MonthDay with(Month month)
返回这个MonthDay
的副本,并更改月份。这将返回指定月份的一个月日。 如果指定月份的日期无效,则日期将被调整到最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
month
- 在返回的月日设置的月份,不为null - 结果
-
一个
MonthDay
基于这个月份与请求的月份,不为null
-
withDayOfMonth
public MonthDay withDayOfMonth(int dayOfMonth)
返回此MonthDay
的副本,并更改日期。这将返回具有指定日期的月日。 如果当月的日期无效,则抛出异常。
此实例是不可变的,不受此方法调用的影响。
- 参数
-
dayOfMonth
- 返回月日,从1到31的月份 - 结果
-
一个
MonthDay
基于这个月日的请求日,不为null - 异常
-
DateTimeException
- 如果月日的价值无效,或者月的日期对于该月无效
-
query
public <R> R query(TemporalQuery<R> query)
使用指定的查询查询此月日。这使用指定的查询策略对象查询本月。
TemporalQuery
对象定义了用于获取结果的逻辑。 阅读查询的文档,以了解该方法的结果。该方法的结果是通过对通过
this
作为参数的指定查询调用TemporalQuery.queryFrom(TemporalAccessor)
方法获得的。- Specified by:
-
query
在接口TemporalAccessor
- 参数类型
-
R
- 结果的类型 - 参数
-
query
- 要调用的查询,不为空 - 结果
- 查询结果可能返回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
在接口TemporalAdjuster
- 参数
-
temporal
- 要调整的目标对象,不为null - 结果
- 调整对象,不为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
- 与其他月相比,不为空 - 结果
- 如果这是在指定的月日之后,则为真
-
isBefore
public boolean isBefore(MonthDay other)
检查这个月日是否在指定的月日之前。- 参数
-
other
- 与其他月相比,不为空 - 结果
- 如果这一点在指定的月日之前,则为true
-
equals
public boolean equals(Object obj)
检查这个月日是否等于另一个月 - 日。比较是基于一年内的月日的时间位置。
- 重写:
-
equals
在Object
- 参数
-
obj
- 要检查的对象,null返回false - 结果
- 如果这等于其他月日,则为真
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
这个月的哈希码。- 重写:
-
hashCode
在Object
- 结果
- 一个合适的哈希码
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-