- 所有已实现的接口:
Serializable,Comparable<MonthDay>,TemporalAccessor,TemporalAdjuster
--12-03 。
MonthDay 是一个不可变的日期时间对象,表示月份和日期的组合。任何可以从月和日派生出来的字段,比如quarter-of-year,都可以得到。
此类不存储或表示年份、时间或时区。例如,值“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类;程序员应该将 equal 的实例视为可互换的,并且不应使用实例进行同步,否则可能会发生不可预测的行为。例如,在未来的版本中,同步可能会失败。 equals 方法应该用于比较。
- 实现要求:
- 这个类是不可变的和线程安全的。
- 自从:
- 1.8
- 参见:
-
方法总结
修饰符和类型方法描述adjustInto(Temporal temporal) 调整指定的时间对象以具有此月-日。atYear(int year) 将这个月-日与年份结合起来创建一个LocalDate。int将这个月日与另一个月日进行比较。boolean检查这个月日是否等于另一个月日。format(DateTimeFormatter formatter) 使用指定的格式化程序格式化这个月日。static MonthDayfrom(TemporalAccessor temporal) 从时间对象中获取MonthDay的实例。intget(TemporalField field) 从此月-日获取指定字段的值作为int。int获取日期字段。longgetLong(TemporalField field) 从此月-日获取指定字段的值作为long。getMonth()使用Month枚举获取月份字段。int获取从 1 到 12 的月份字段。inthashCode()这个月-日的哈希码。boolean检查这个月日是否在指定的月日之后。boolean检查这个月日是否在指定的月日之前。booleanisSupported(TemporalField field) 检查是否支持指定的字段。booleanisValidYear(int year) 检查年份是否对该月-日有效。static MonthDaynow()从默认时区的系统时钟获取当前月日。static MonthDay从指定时钟获取当前月-日。static MonthDay从指定时区的系统时钟获取当前月-日。static MonthDayof(int month, int dayOfMonth) 获得MonthDay的实例。static MonthDay获得MonthDay的实例。static MonthDayparse(CharSequence text) 从--12-03等文本字符串中获取MonthDay的实例。static MonthDayparse(CharSequence text, DateTimeFormatter formatter) 使用特定格式化程序从文本字符串中获取MonthDay的实例。<R> Rquery(TemporalQuery<R> query) 使用指定查询查询本月-日。range(TemporalField field) 获取指定字段的有效值范围。toString()将这个月-日输出为String,例如--12-03。返回此MonthDay的副本,其中月份已更改。withDayOfMonth(int dayOfMonth) 返回此MonthDay的副本,其中日期已更改。withMonth(int month) 返回此MonthDay的副本,其中月份已更改。
-
方法详情
-
now
从默认时区的系统时钟获取当前月日。这将查询默认时区中的
system clock以获取当前月日。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 返回:
- 使用系统时钟和默认时区的当前月日,不为空
-
now
从指定时区的系统时钟获取当前月-日。这将查询
system clock以获取当前月-日。指定时区避免了对默认时区的依赖。使用此方法将阻止使用备用时钟进行测试的能力,因为时钟是硬编码的。
- 参数:
zone- 要使用的区域 ID,不为空- 返回:
- 使用系统时钟的当前月日,不为空
-
now
从指定时钟获取当前月-日。这将查询指定的时钟以获取当前的月-日。使用此方法允许使用备用时钟进行测试。可以使用
dependency injection引入备用时钟。- 参数:
clock- 使用的时钟,不为空- 返回:
- 当前月日,不为空
-
of
获得MonthDay的实例。日期必须对闰年内的月份有效。因此,对于 2 月,第 29 天有效。
例如,在 4 月和第 31 天传递将引发异常,因为任何一年都不可能有 4 月 31 日。相比之下,允许在 2 月 29 日通过,因为该月日有时是有效的。
- 参数:
month- 要表示的月份,不为空dayOfMonth- 要表示的日期,从 1 到 31- 返回:
- 月日,不为空
- 抛出:
DateTimeException- 如果任何字段的值超出范围,或者如果该月的日期无效
-
of
获得MonthDay的实例。日期必须对闰年内的月份有效。因此,对于第 2 个月(2 月),第 29 天有效。
例如,在第 4 个月(4 月)和第 31 天传递将引发异常,因为任何一年都不可能有 4 月 31 日。相比之下,允许在 2 月 29 日通过,因为该月日有时是有效的。
- 参数:
month- 要表示的月份,从 1(一月)到 12(十二月)dayOfMonth- 要表示的日期,从 1 到 31- 返回:
- 月日,不为空
- 抛出:
DateTimeException- 如果任何字段的值超出范围,或者如果该月的日期无效
-
from
从时间对象中获取MonthDay的实例。这将根据指定的时间获得月日。
TemporalAccessor表示一组任意的日期和时间信息,该工厂将其转换为MonthDay的一个实例。转换提取
MONTH_OF_YEAR和DAY_OF_MONTH字段。仅当时间对象具有 ISO 年表或可以转换为LocalDate时才允许提取。此方法与功能接口
TemporalQuery的签名相匹配,允许它通过方法参考MonthDay::from用作查询。- 参数:
temporal- 要转换的时间对象,不为空- 返回:
- 月日,不为空
- 抛出:
DateTimeException- 如果无法转换为MonthDay
-
parse
从--12-03等文本字符串中获取MonthDay的实例。该字符串必须表示有效的月-日。格式为
--MM-dd。- 参数:
text- 要解析的文本,例如“--12-03”,不为空- 返回:
- 解析的月日,不为空
- 抛出:
DateTimeParseException- 如果无法解析文本
-
parse
使用特定格式化程序从文本字符串中获取MonthDay的实例。使用格式化程序解析文本,返回月-日。
- 参数:
text- 要解析的文本,不为空formatter- 要使用的格式化程序,不为空- 返回:
- 解析的月日,不为空
- 抛出:
DateTimeParseException- 如果无法解析文本
-
isSupported
检查是否支持指定的字段。这将检查是否可以查询指定字段的月日。如果为 false,则调用
range和get方法将抛出异常。如果该字段是一个
ChronoField那么查询就在这里实现。支持的字段是:MONTH_OF_YEARYEAR
ChronoField实例将返回 false。如果该字段不是
ChronoField,则通过调用TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数来获得此方法的结果。字段是否支持由字段决定。- 指定者:
isSupported在接口TemporalAccessor中- 参数:
field- 要检查的字段,null 返回 false- 返回:
- 如果该月-日支持该字段,则为 true,否则为 false
-
range
获取指定字段的有效值范围。范围对象表示字段的最小和最大有效值。这个月-日用于增强返回范围的准确性。如果由于不支持该字段或其他原因而无法返回范围,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将返回适当的范围实例。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取范围由字段决定。- 指定者:
range在接口TemporalAccessor中- 参数:
field- 查询范围的字段,不为空- 返回:
- 该字段的有效值范围,不为空
- 抛出:
DateTimeException- 如果无法获得该字段的范围UnsupportedTemporalTypeException- 如果不支持该字段
-
get
从此月-日获取指定字段的值作为int。这将在本月-日查询指定字段的值。返回值将始终在该字段的有效值范围内。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将根据这个月-日返回有效值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。- 指定者:
get在接口TemporalAccessor中- 参数:
field- 要获取的字段,不为空- 返回:
- 该字段的值
- 抛出:
DateTimeException- 如果无法获取该字段的值或该值超出该字段的有效值范围UnsupportedTemporalTypeException- 如果不支持该字段或值的范围超过intArithmeticException- 如果发生数字溢出
-
getLong
从此月-日获取指定字段的值作为long。这将在本月-日查询指定字段的值。如果由于不支持该字段或其他原因而无法返回该值,则会抛出异常。
如果该字段是一个
ChronoField那么查询就在这里实现。supported fields将根据这个月-日返回有效值。所有其他ChronoField实例将抛出UnsupportedTemporalTypeException。如果该字段不是
ChronoField,则通过调用TemporalField.getFrom(TemporalAccessor)传递this作为参数来获得此方法的结果。能否获取到该值,该值代表什么,由字段决定。- 指定者:
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- 验证年份- 返回:
- 如果年份对本月-日有效,则为真
- 参见:
-
withMonth
返回此MonthDay的副本,其中月份已更改。这将返回指定月份的月日。如果指定月份的日期无效,则该日期将调整为最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
month- 在返回的月份中设置的月份,从 1(一月)到 12(十二月)- 返回:
-
a
MonthDay基于请求月份的月日,不为空 - 抛出:
DateTimeException- 如果月份值无效
-
with
返回此MonthDay的副本,其中月份已更改。这将返回指定月份的月日。如果指定月份的日期无效,则该日期将调整为最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
- 参数:
month- 在返回的月份中设置的月份,不为空- 返回:
-
a
MonthDay基于请求月份的月日,不为空
-
withDayOfMonth
返回此MonthDay的副本,其中日期已更改。这将返回具有指定日期的月日。如果该月的日期无效,则会抛出异常。
此实例是不可变的,不受此方法调用的影响。
- 参数:
dayOfMonth- 在返回月日中设置的月中日,从 1 到 31- 返回:
-
a
MonthDay基于这个月日和请求的日期,不为空 - 抛出:
DateTimeException- 如果日期值无效,或者该月的日期无效
-
query
使用指定查询查询本月-日。这使用指定的查询策略对象查询这个月-日。
TemporalQuery对象定义了用于获取结果的逻辑。阅读查询文档以了解此方法的结果。此方法的结果是通过对指定查询调用
TemporalQuery.queryFrom(TemporalAccessor)方法并将this作为参数传递来获得的。- 指定者:
query在接口TemporalAccessor中- 类型参数:
R- 结果的类型- 参数:
query- 要调用的查询,不为空- 返回:
- 查询结果,可能返回null(由查询定义)
- 抛出:
DateTimeException- 如果无法查询(由查询定义)ArithmeticException- 如果发生数字溢出(由查询定义)
-
adjustInto
调整指定的时间对象以具有此月-日。这将返回一个与输入具有相同可观察类型的时间对象,其中月份和日期更改为与此相同。
调整相当于使用
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);
此实例是不可变的,不受此方法调用的影响。
- 指定者:
adjustInto在接口TemporalAdjuster中- 参数:
temporal- 要调整的目标对象,不为空- 返回:
- 调整后的对象,不为空
- 抛出:
DateTimeException- 如果无法进行调整ArithmeticException- 如果发生数字溢出
-
format
使用指定的格式化程序格式化这个月日。这个月-日将传递给格式化程序以生成一个字符串。
- 参数:
formatter- 要使用的格式化程序,不为空- 返回:
- 格式化的月日字符串,不为空
- 抛出:
DateTimeException- 如果在打印过程中发生错误
-
atYear
将这个月-日与年份结合起来创建一个LocalDate。这将返回一个
LocalDate从这个月日和指定的年份形成。如果年份不是闰年,结果日期中的 2 月 29 日将调整为 2 月 28 日。
此实例是不可变的,不受此方法调用的影响。
- 参数:
year- 使用的年份,从 MIN_YEAR 到 MAX_YEAR- 返回:
- 由本月日和指定年份组成的本地日期,不为空
- 抛出:
DateTimeException- 如果年份超出有效年份范围
-
compareTo
将这个月日与另一个月日进行比较。比较首先基于月的值,然后基于日的值。正如
Comparable所定义的那样,它“与等于一致”。- 指定者:
compareTo在接口Comparable<MonthDay>中- 参数:
other- 要比较的其他月日,不为空- 返回:
- 比较值,小于则为负,大于则为正
-
isAfter
检查这个月日是否在指定的月日之后。- 参数:
other- 要比较的其他月日,不为空- 返回:
- 如果这是在指定的月日之后,则为真
-
isBefore
检查这个月日是否在指定的月日之前。- 参数:
other- 要比较的其他月日,不为空- 返回:
- 如果这一点在指定的月日之前,则为真
-
equals
检查这个月日是否等于另一个月日。比较是根据一年中月日的时间线位置。
-
hashCode
public int hashCode()这个月-日的哈希码。 -
toString
将这个月-日输出为String,例如--12-03。输出将采用
--MM-dd格式:
-