- 所有已实现的接口:
-
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 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的副本。
-
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_YEARYEAR
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的格式:
-