public final class MonthDay extends Object implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
--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方法应用于比较。
| Modifier and Type | Method and Description |
|---|---|
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从文本字符串获取一个
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的副本。
|
public static MonthDay now()
public static MonthDay now(Clock clock)
这将查询指定的时钟以获取当前的月日。 使用此方法可以使用备用时钟进行测试。 替代时钟可以使用dependency injection引入 。
clock - 要使用的时钟,不为空
public static MonthDay of(Month month, int dayOfMonth)
MonthDay的实例。
闰年内的月份必须有效。 因此,二月二十九日是有效的。
例如,四月和第三十一日的通行将会引起例外,因为在任何一年都不可能有4月31日。 相比之下,允许在二月二十九日过境,因为这个月日有时是有效的。
month - 代表的月份,不为null
dayOfMonth - 代表从1到31的月份
DateTimeException - 如果任何字段的值超出范围,或月的日期对于该月无效
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 - 如果任何字段的值超出范围,或者月的日期对于该月无效
public static MonthDay from(TemporalAccessor temporal)
MonthDay的实例。
这将基于指定的时间获得一个月日。 A TemporalAccessor表示日期和时间信息的任意集合,该工厂将转换为MonthDay一个实例。
该转换提取了MONTH_OF_YEAR和DAY_OF_MONTH字段。 仅当时间对象具有ISO年表,或者可以转换为LocalDate时, LocalDate 。
该方法中,功能接口的签名相匹配TemporalQuery允许它在通过方法参考,查询中使用MonthDay::from 。
temporal - 要转换的时间对象,不为空
DateTimeException - 如果无法转换为
MonthDay
public static MonthDay parse(CharSequence text)
MonthDay一个实例,例如--12-03 。
字符串必须表示有效的日期。 格式为--MM-dd 。
text - 要解析的文本,如“--12-03”,不为空
DateTimeParseException - 如果文本无法解析
public static MonthDay parse(CharSequence text, DateTimeFormatter formatter)
MonthDay从文本字符串获取一个MonthDay的实例。
使用格式化程序解析文本,返回一个月的日子。
text - 要解析的文本,不为null
formatter - 要使用的格式化程序,不为null
DateTimeParseException - 如果文本无法解析
public boolean isSupported(TemporalField field)
这将检查是否可以查询指定字段的这个月日。 如果是false,那么调用range和get方法会抛出异常。
如果该字段是ChronoField,那么查询是在这里实现的。 支持的字段有:
MONTH_OF_YEAR YEAR ChronoField实例将返回false。
如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数。 字段是否受支持由字段决定。
isSupported在界面
TemporalAccessor
field - 要检查的字段,null返回false
public ValueRange range(TemporalField field)
范围对象表示字段的最小和最大有效值。 这个月份用于提高返回范围的准确性。 如果不可能返回范围,因为该字段不受支持或出于某种其他原因,则抛出异常。
如果该字段是ChronoField,那么查询是在这里实现的。 supported fields将返回适当的范围实例。 所有其他ChronoField实例将抛出一个UnsupportedTemporalTypeException 。
如果该字段不是ChronoField ,则通过调用TemporalField.rangeRefinedBy(TemporalAccessor) this作为参数的this获得该方法的结果。 是否可以获得范围由字段确定。
range在界面
TemporalAccessor
field - 查询范围的字段,不为null
DateTimeException - 如果不能获得该字段的范围
UnsupportedTemporalTypeException - 如果该字段不被支持
public int get(TemporalField field)
int 。
这个月份的日期会查询指定字段的值。 返回的值将始终在该字段的值的有效范围内。 如果不可能返回值,因为该字段不受支持或出于某种其他原因,则抛出异常。
如果该字段是ChronoField,那么查询是在这里实现的。 supported fields将返回基于本月的有效值。 所有其他ChronoField实例将抛出一个UnsupportedTemporalTypeException 。
如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。 该值是否可以获得,该值代表什么值由该字段决定。
get在界面
TemporalAccessor
field - 要获取的字段,不为null
DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值的范围
UnsupportedTemporalTypeException - 如果该字段不被支持或值的范围超过
int
ArithmeticException - 如果发生数字溢出
public long getLong(TemporalField field)
long 。
这个月份的日期会查询指定字段的值。 如果不可能返回值,因为该字段不受支持或出于某种其他原因,则抛出异常。
如果该字段是ChronoField,那么查询在这里实现。 supported fields将根据本月日返回有效值。 所有其他ChronoField实例将抛出一个UnsupportedTemporalTypeException 。
如果该字段不是ChronoField ,则通过调用TemporalField.getFrom(TemporalAccessor) this作为参数的this获得该方法的结果。 该值是否可以获得,该值代表什么值由该字段决定。
getLong在界面
TemporalAccessor
field - 要获取的字段,不为null
DateTimeException - 如果无法获取字段的值
UnsupportedTemporalTypeException - 如果该字段不被支持
ArithmeticException - 如果发生数字溢出
public int getMonthValue()
此方法将一个月作为int从1到12返回。如果通过调用getMonth()使用枚举Month ,应用程序代码通常更清晰。
getMonth()
public Month getMonth()
getMonthValue()
public int getDayOfMonth()
此方法返回月份的int值int值。
public boolean isValidYear(int year)
此方法检查此月和日以及输入年份是否形成有效日期。 这只能在二月二十九日返回假。
year - 验证年份,超出范围值返回false
Year.isValidMonthDay(MonthDay)
public MonthDay withMonth(int month)
MonthDay的副本。
这将返回指定月份的一个月日。 如果指定月份的日期无效,则日期将被调整到最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
month - 从1月(1月)至12月(12月)返回的月日设定的月份
MonthDay基于这个月日与请求的月份,不为null
DateTimeException - 如果月份值无效
public MonthDay with(Month month)
MonthDay的副本。
这将返回指定月份的一个月日。 如果指定月份的日期无效,则日期将被调整到最后一个有效的日期。
此实例是不可变的,不受此方法调用的影响。
month - 在返回的月日设置的月份,不为空
MonthDay基于这个月日与请求的月份,不为null
public MonthDay withDayOfMonth(int dayOfMonth)
MonthDay的副本,并更改日期。
这将返回具有指定日期的月日。 如果当月的日期无效,则抛出异常。
此实例是不可变的,不受此方法调用的影响。
dayOfMonth - 返回月日,从1到31的月份
MonthDay基于这个月日与请求的一天,不为null
DateTimeException - 如果月日的价值无效,或者月的日期对于该月无效
public <R> R query(TemporalQuery<R> query)
这使用指定的查询策略对象查询本月。 TemporalQuery对象定义了用于获取结果的逻辑。 阅读查询的文档,以了解该方法的结果。
该方法的结果是通过调用TemporalQuery.queryFrom(TemporalAccessor)方法在指定的查询上通过this作为参数获得的。
query在界面
TemporalAccessor
R - 结果的类型
query - 要调用的查询,不为null
DateTimeException - 如果无法查询(由查询定义)
ArithmeticException - 如果发生数字溢出(由查询定义)
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);
此实例是不可变的,不受此方法调用的影响。
adjustInto在接口
TemporalAdjuster
temporal - 要调整的目标对象,不为null
DateTimeException - 如果不能进行调整
ArithmeticException - 如果发生数字溢出
public String format(DateTimeFormatter formatter)
这个月的日子将传递给格式化程序来生成一个字符串。
formatter - 要使用的格式化程序,不为null
DateTimeException - 打印时是否发生错误
public LocalDate atYear(int year)
LocalDate 。
这将返回一个LocalDate从本月日和指定的年形成。
如果这一年不是闰年,那么2月29日的一个月的日子将会调整到2月28日。
此实例是不可变的,不受此方法调用的影响。
year - 从MIN_YEAR到MAX_YEAR的使用年数
DateTimeException - 如果年度超出有效期限
public int compareTo(MonthDay other)
比较首先是基于月份的价值,然后是当天的价值。 这是“与equals一致”,被定义Comparable 。
compareTo在界面
Comparable<MonthDay>
other - 与其他月相比,不为空
public boolean isAfter(MonthDay other)
other - 与其他月相比,不为空
public boolean isBefore(MonthDay other)
other - 与之对比的其他月日,不为空
public boolean equals(Object obj)
比较是基于一年内的月日的时间位置。
equals在
Object
obj - 要检查的对象,null返回false
Object.hashCode() , HashMap
public int hashCode()
hashCode在
Object
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.