public final class MonthDay extends Object implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
--12-03
など)。
MonthDay
は、月と日の組合せを表す不変の日付/時間オブジェクトです。 月と日から生成できるフィールド(四半期など)はすべて取得できます。
このクラスは、年、時間、またはタイムゾーンを格納したり表現したりしません。 たとえば、「December 3rd」という値をMonthDay
に格納できます。
MonthDay
は年を持たないため、2月29日のうるう日は有効とみなされます。
このクラスは、Temporal
ではなく、TemporalAccessor
を実装します。 これは、外部情報がなければ2月29日が有効であるかどうかを定義できないため、加算/減算の実装が行われないからです。 これについてMonthDay
は、MONTH_OF_YEAR
およびDAY_OF_MONTH
フィールドにアクセスして問合せおよび設定のみを行えます。
ISO-8601暦体系は、世界中の大部分で現在使われている近代の常用暦体系です。 これは、現在のうるう年のルールがすべての時間に適用される、先発グレゴリオ暦体系と同等です。 今日作成されているほとんどのアプリケーションには、ISO-8601のルールが完全に適しています。 ただし、歴史的な日付を使用し、それらが正確であることを必要とするアプリケーションには、ISO-8601の方法が適さないことがわかります。
これは値ベースのクラスです。MonthDay
のインスタンスに対して、アイデンティティの影響を受けやすい操作(参照型等価演算子(==
)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予測できない結果が生じることがあるため、使わないようにしてください。 比較する場合は、equals
メソッドを使用することをお薦めします。
修飾子と型 | メソッド | 説明 |
---|---|---|
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 のコピーを返します。 |
public static MonthDay now()
これは、デフォルトのタイムゾーンのシステム・クロック
を問い合せて、現在の月-日を取得します。
このメソッドを使用すると、クロックがハードコードされているため、テストに代替のクロックを使用できないようにします。
public static MonthDay now(ZoneId zone)
これは、システム・クロック
を問い合せて現在の月-日を取得します。 タイムゾーンを指定すると、デフォルトのタイムゾーンへの依存を避けられます。
このメソッドを使用すると、クロックがハードコードされているため、テストに代替のクロックを使用できないようにします。
zone
- 使用するゾーンID、null以外public static MonthDay now(Clock clock)
これは、指定されたクロックを問い合せて現在の月-日を取得します。 このメソッドを使用すると、テストに代替のクロックを使用できます。 代替のクロックはdependency injection
を使用して導入できます。
clock
- 使用するクロック、null以外public static MonthDay of(Month month, int dayOfMonth)
MonthDay
のインスタンスを取得します。
「月の日」は、うるう年の月に対して有効である必要があります。 したがって、2月の場合、29日は有効です。
たとえば、4月31日はどの年にも存在するはずがないため、4月と31日を渡すと、例外がスローされます。 対照的に、2月29日は有効である可能性があるため、その月-日を渡すことは許可されています。
month
- 表される月。null以外dayOfMonth
- 表される「月の日」(1-31)DateTimeException
- いずれかのフィールドの値が範囲外にある場合、または「月の日」がその月に対して無効である場合public static MonthDay of(int month, int dayOfMonth)
MonthDay
のインスタンスを取得します。
「月の日」は、うるう年の月に対して有効である必要があります。 したがって、2番目の月(2月)の場合、29日は有効です。
たとえば、4月31日はどの年にも存在するはずがないため、4番目の月(4月)と31日を渡すと、例外がスローされます。 対照的に、2月29日は有効である可能性があるため、その月-日を渡すことは許可されています。
month
- 表される月。1(1月)-12(12月)dayOfMonth
- 表される「月の日」(1-31)DateTimeException
- いずれかのフィールドの値が範囲外にある場合、または「月の日」がその月に対して無効である場合public static MonthDay from(TemporalAccessor temporal)
MonthDay
のインスタンスを取得します。
これは、指定された時間的オブジェクトに基づいて月-日を取得します。 TemporalAccessor
は任意の日付と時間のセットに関する情報を表し、それがこのファクトリでMonthDay
のインスタンスに変換されます。
この変換では、MONTH_OF_YEAR
およびDAY_OF_MONTH
フィールドを抽出します。 この抽出が許可されるのは、時間的オブジェクトにISOの暦が含まれているか、そのオブジェクトをLocalDate
に変換できる場合にかぎられます。
このメソッドは関数型インタフェースTemporalQuery
のシグネチャに一致するため、メソッド参照MonthDay::from
を介して、問合せとして使用できます。
temporal
- 変換する一時オブジェクト、null以外DateTimeException
- if unable to convert to a MonthDay
public static MonthDay parse(CharSequence text)
--12-03
などのテキスト文字列からMonthDay
のインスタンスを取得します。
この文字列は有効な月-日を表している必要があります。 フォーマットは--MM-dd
です。
DateTimeParseException
- テキストが解析できない場合public static MonthDay parse(CharSequence text, DateTimeFormatter formatter)
MonthDay
のインスタンスを取得します。
そのテキストがフォーマッタを使って解析され、月-日が返されます。
text
- 解析するテキスト。null以外formatter
- 使用するフォーマッタ、null以外DateTimeParseException
- テキストが解析できない場合public boolean isSupported(TemporalField field)
これは、指定されたフィールドをこの月-日に問い合せることができるかどうかを確認します。 falseの場合、range
メソッドとget
メソッドを呼び出すと例外がスローされます。
フィールドがChronoField
の場合、ここに問合せを実装します。 サポートされるフィールドは次のとおりです。
MONTH_OF_YEAR
YEAR
ChronoField
インスタンスはfalseを返します。
フィールドがChronoField
でない場合、このメソッドの結果は、this
を引数として渡してTemporalField.isSupportedBy(TemporalAccessor)
を呼び出すことによって取得します。 フィールドがサポートされているかどうかはフィールドによって決定します。
TemporalAccessor
のisSupported
field
- チェックするフィールド、nullはfalseを返すpublic ValueRange range(TemporalField field)
範囲オブジェクトはフィールドの有効な最小値と最大値を表します。 この月-日は、返される範囲の精度を高めるために使用されます。 範囲を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。
フィールドがChronoField
の場合、ここに問合せを実装します。 サポートされるフィールド
は適切な範囲のインスタンスを返します。 他のすべてのChronoField
インスタンスはUnsupportedTemporalTypeException
をスローします。
フィールドがChronoField
ではない場合、このメソッドの結果は、引数としてthis
を渡してTemporalField.rangeRefinedBy(TemporalAccessor)
を呼び出すことにより取得されます。 範囲を取得できるかどうかはフィールドによって決まります。
TemporalAccessor
のrange
field
- 範囲を問い合わせるフィールド、null以外DateTimeException
- フィールドの範囲を取得できない場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合public int get(TemporalField field)
int
として取得します。
これは、指定されたフィールドの値についてこの月/日に問い合せます。 返される値は常にフィールドの値の有効な範囲内になります。 値を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。
フィールドがChronoField
の場合、ここに問合せを実装します。 サポートされているフィールド
は、この月-日に基づいて有効な値を返します。 他のすべてのChronoField
インスタンスはUnsupportedTemporalTypeException
をスローします。
フィールドがChronoField
ではない場合、このメソッドの結果は、引数としてthis
を渡してTemporalField.getFrom(TemporalAccessor)
を呼び出すことにより取得されます。 値を取得できるかどうか、および値が何を表すかは、フィールドによって決まります。
TemporalAccessor
のget
field
- 取得するフィールド、null以外DateTimeException
- フィールドの値を取得できない場合、または値がフィールドの有効な値の範囲外の場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合、または値の範囲がint
を超えている場合ArithmeticException
- 数値のオーバーフローが発生した場合public long getLong(TemporalField field)
long
として取得します。
これは、指定されたフィールドの値についてこの月/日に問い合せます。 値を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。
フィールドがChronoField
の場合、ここに問合せを実装します。 サポートされているフィールド
は、この月-日に基づいて有効な値を返します。 他のすべてのChronoField
インスタンスはUnsupportedTemporalTypeException
をスローします。
フィールドがChronoField
ではない場合、このメソッドの結果は、引数としてthis
を渡してTemporalField.getFrom(TemporalAccessor)
を呼び出すことにより取得されます。 値を取得できるかどうか、および値が何を表すかは、フィールドによって決まります。
TemporalAccessor
のgetLong
field
- 取得するフィールド、null以外DateTimeException
- フィールドの値を取得できない場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合ArithmeticException
- 数値のオーバーフローが発生した場合public int getMonthValue()
このメソッドは、月を1-12のint
として返します。 getMonth()
を呼び出すことで列挙型Month
が使用される場合は、アプリケーション・コードがより明確になることが多くなります。
getMonth()
public Month getMonth()
Month
を使用して、月フィールドを取得します。
このメソッドは、月を表す列挙型Month
を返します。 これによって、int
値が意味する内容に関する混乱を回避できます。 プリミティブなint
値にアクセスする必要がある場合、この列挙型はint値
を提供します。
getMonthValue()
public int getDayOfMonth()
このメソッドは、「月の日」を表すプリミティブなint
値を返します。
public boolean isValidYear(int year)
このメソッドは、この月と日、および入力された年から有効な日付が形成されるかどうかを確認します。 これは、2月29日の場合にのみfalseを返す可能性があります。
year
- 検証する年Year.isValidMonthDay(MonthDay)
public MonthDay withMonth(int month)
MonthDay
のコピーを返します。
これは、指定された月を使って月-日を返します。 「月の日」が指定された月に対して無効である場合は、最後の有効な「月の日」に調整されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
month
- 返される月-日に設定する月。1(1月)-12(12月)MonthDay
。null以外DateTimeException
- 月の値が無効である場合public MonthDay with(Month month)
MonthDay
のコピーを返します。
これは、指定された月を使って月-日を返します。 「月の日」が指定された月に対して無効である場合は、最後の有効な「月の日」に調整されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
month
- 返される月-日に設定する月。null以外MonthDay
。null以外public MonthDay withDayOfMonth(int dayOfMonth)
MonthDay
のコピーを返します。
これは、指定された「月の日」を使って月-日を返します。 「月の日」がその月に対して無効である場合は、例外がスローされます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
dayOfMonth
- 返される月-日に設定する「月の日」(1-31)MonthDay
。null以外DateTimeException
- 「月の日」の値が無効である場合、または「月の日」がその月に対して無効である場合public <R> R query(TemporalQuery<R> query)
これは、指定された問合せ方針オブジェクトを使用してこの月-日を問い合わせます。 TemporalQuery
オブジェクトは結果を取得するために使用するロジックを定義します。 このメソッドの結果を理解するには、問合せのドキュメントをお読みください。
このメソッドの結果は、this
を引数として渡して、指定した問合せでTemporalQuery.queryFrom(TemporalAccessor)
メソッドを呼び出すことによって取得します。
TemporalAccessor
のquery
R
- 結果の型query
- 呼び出す問合せ、null以外DateTimeException
- 問い合わせできない場合(問合せによって定義される)ArithmeticException
- 数値のオーバーフローが発生した場合(問合せによって定義される)public Temporal adjustInto(Temporal temporal)
これは、月と「月の日」をこれと同じになるように変更して、入力と同じ識別可能な型の時間的オブジェクトを返します。
この調整は、ChronoField.MONTH_OF_YEAR
およびChronoField.DAY_OF_MONTH
をフィールドとして渡してTemporal.with(TemporalField, long)
を2回使用することと同等です。 指定された時間的オブジェクトがISOの暦体系を使用しない場合は、DateTimeException
がスローされます。
ほとんどのケースで、Temporal.with(TemporalAdjuster)
を使用して、呼び出しパターンを逆にすると明確になります。
// these two lines are equivalent, but the second approach is recommended temporal = thisMonthDay.adjustInto(temporal); temporal = temporal.with(thisMonthDay);
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
TemporalAdjuster
のadjustInto
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)
この比較は、まず月の値に基づいて行われ、次に日の値に基づいて行われます。 Comparable
に定義されているとおりに、「equalsと一致」しています。
compareTo
、インタフェースComparable<MonthDay>
other
- 比較対象のもう一方の月-日。null以外public boolean isAfter(MonthDay other)
other
- 比較対象のもう一方の月-日。null以外public boolean isBefore(MonthDay other)
other
- 比較対象のもう一方の月-日。null以外public boolean equals(Object obj)
この比較は、1年のうちのそれらの月-日の時系列上の位置に基づいています。
equals
、クラスObject
obj
- チェックするオブジェクト、nullはfalseを返すObject.hashCode()
、HashMap
public int hashCode()
hashCode
、クラスObject
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。