- 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 方法 描述 TemporaladjustInto(Temporal temporal)将指定的时间对象调整为具有这个月日。LocalDateatYear(int year)结合这一个月与一年创造LocalDate。intcompareTo(MonthDay other)比较这个月份到另一个月的日子。booleanequals(Object obj)检查这个月日是否等于另一个月 - 日。Stringformat(DateTimeFormatter formatter)使用指定的格式化程序格式化本月。static MonthDayfrom(TemporalAccessor temporal)从时间对象获取一个MonthDay的实例。intget(TemporalField field)从这个月日获取指定字段的值作为int。intgetDayOfMonth()获取月份字段。longgetLong(TemporalField field)从这个月份获取指定字段的值作为long。MonthgetMonth()使用Month枚举获取月份字段。intgetMonthValue()将月份字段从1到12。inthashCode()这个月的哈希码。booleanisAfter(MonthDay other)检查这个月日是否在指定的月日之后。booleanisBefore(MonthDay other)检查这个月日是否在指定的月日之前。booleanisSupported(TemporalField field)检查指定的字段是否受支持。booleanisValidYear(int year)检查年份是否适用于本月。static MonthDaynow()从默认时区的系统时钟获取当前月日。static MonthDaynow(Clock clock)从指定的时钟获取当前的月日。static MonthDaynow(ZoneId zone)从指定时区的系统时钟获取当前的月日。static MonthDayof(int month, int dayOfMonth)获得MonthDay的实例。static MonthDayof(Month month, int dayOfMonth)获得MonthDay的实例。static MonthDayparse(CharSequence text)从文本字符串(例如--12-03获取MonthDay的实例。static MonthDayparse(CharSequence text, DateTimeFormatter formatter)使用特定格式化程序从文本字符串获取MonthDay的实例。<R> Rquery(TemporalQuery<R> query)使用指定的查询查询此月日。ValueRangerange(TemporalField field)获取指定字段的有效值的范围。StringtoString()本月的产量为String,如--12-03。MonthDaywith(Month month)返回这个MonthDay的副本,并更改月份。MonthDaywithDayOfMonth(int dayOfMonth)返回此MonthDay的副本,并更改日期。MonthDaywithMonth(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)
-
-