モジュール java.base
パッケージ java.time

クラスMonthDay

java.lang.Object
java.time.MonthDay
すべての実装されたインタフェース:
Serializable, Comparable<MonthDay>, TemporalAccessor, TemporalAdjuster

public final class MonthDay extends Object implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
ISO-8601暦体系における月日(--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の方法が適さないことがわかります。

これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equalsメソッドを使用することをお薦めします。

実装要件:
このクラスは不変でスレッドセーフです。
導入されたバージョン:
1.8
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    adjustInto(Temporal temporal)
    指定された時間的オブジェクトを、この月-日が含まれるように調整します。
    atYear(int year)
    この月-日を年と組み合せてLocalDateを作成します。
    int
    この月-日をもう一方の月-日と比較します。
    boolean
    この月-日がもう一方の月-日と等しいかどうかを確認します。
    指定されたフォーマッタを使用してこの月-日を書式設定します。
    static MonthDay
    時間的オブジェクトからMonthDayのインスタンスを取得します。
    int
    指定されたフィールドの値をこの月-日からintとして取得します。
    int
    「月の日」フィールドを取得します。
    long
    指定されたフィールドの値をこの月-日からlongとして取得します。
    列挙型Monthを使用して、月フィールドを取得します。
    int
    月フィールドを取得します(1-12)。
    int
    この月-日のハッシュ・コードです。
    boolean
    この月/日が、指定された月/日より後にあるかどうかをチェックします。
    boolean
    この月/日が、指定された月/日より前にあるかどうかをチェックします。
    boolean
    指定されたフィールドがサポートされているかどうかをチェックします。
    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
    --12-03などのテキスト文字列からMonthDayのインスタンスを取得します。
    static MonthDay
    特定のフォーマッタを使用して、テキスト文字列からMonthDayのインスタンスを取得します。
    <R> R
    query(TemporalQuery<R> query)
    指定された問合せを使用してこの月-日を問い合わせます。
    指定されたフィールドの有効な値の範囲を取得します。
    この月-日をStringとして出力します(--12-03など)。
    with(Month month)
    月を変更して、このMonthDayのコピーを返します。
    withDayOfMonth(int dayOfMonth)
    「月の日」を変更して、このMonthDayのコピーを返します。
    withMonth(int month)
    月を変更して、このMonthDayのコピーを返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • メソッドの詳細

    • now

      public static MonthDay now()
      デフォルトのタイムゾーンのシステム・クロックから現在の月-日を取得します。

      これは、デフォルトのタイムゾーンのシステム・クロックを問い合せて、現在の月-日を取得します。

      このメソッドを使用すると、クロックがハードコードされているため、テストに代替のクロックを使用できないようにします。

      戻り値:
      システム・クロックとデフォルトのタイムゾーンを使用した現在の月-日。null以外
    • now

      public static MonthDay now(ZoneId zone)
      指定されたタイムゾーンのシステム・クロックから現在の月-日を取得します。

      これは、システム・クロックを問い合せて現在の月-日を取得します。 タイムゾーンを指定すると、デフォルトのタイムゾーンへの依存を避けられます。

      このメソッドを使用すると、クロックがハードコードされているため、テストに代替のクロックを使用できないようにします。

      パラメータ:
      zone - 使用するゾーンID、null以外
      戻り値:
      システム・クロックを使用した現在の月-日。null以外
    • now

      public static MonthDay now(Clock clock)
      指定されたクロックから現在の月-日を取得します。

      これは、指定されたクロックを問い合せて現在の月-日を取得します。 このメソッドを使用すると、テストに代替のクロックを使用できます。 代替のクロックはdependency injectionを使用して導入できます。

      パラメータ:
      clock - 使用するクロック、null以外
      戻り値:
      現在の月-日。null以外
    • of

      public static MonthDay of(Month month, int dayOfMonth)
      MonthDayのインスタンスを取得します。

      「月の日」は、うるう年の月に対して有効である必要があります。 したがって、2月の場合、29日は有効です。

      たとえば、4月31日はどの年にも存在するはずがないため、4月と31日を渡すと、例外がスローされます。 対照的に、2月29日は有効である可能性があるため、その月-日を渡すことは許可されています。

      パラメータ:
      month - 表される月。null以外
      dayOfMonth - 表される「月の日」(1-31)
      戻り値:
      月-日。null以外
      例外:
      DateTimeException - いずれかのフィールドの値が範囲外にある場合、または「月の日」がその月に対して無効である場合
    • of

      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)
      戻り値:
      月-日。null以外
      例外:
      DateTimeException - いずれかのフィールドの値が範囲外にある場合、または「月の日」がその月に対して無効である場合
    • from

      public static MonthDay from(TemporalAccessor temporal)
      時間的オブジェクトからMonthDayのインスタンスを取得します。

      これは、指定された時間的オブジェクトに基づいて月-日を取得します。 TemporalAccessorは任意の日付と時間のセットに関する情報を表し、それがこのファクトリでMonthDayのインスタンスに変換されます。

      この変換では、MONTH_OF_YEARおよびDAY_OF_MONTHフィールドを抽出します。 この抽出が許可されるのは、時間的オブジェクトにISOの暦が含まれているか、そのオブジェクトをLocalDateに変換できる場合にかぎられます。

      このメソッドは関数型インタフェースTemporalQueryのシグネチャに一致するため、メソッド参照MonthDay::fromを介して、問合せとして使用できます。

      パラメータ:
      temporal - 変換する一時オブジェクト、null以外
      戻り値:
      月-日。null以外
      例外:
      DateTimeException - if unable to convert to a MonthDay
    • parse

      public static MonthDay parse(CharSequence text)
      --12-03などのテキスト文字列からMonthDayのインスタンスを取得します。

      この文字列は有効な月-日を表している必要があります。 フォーマットは--MM-ddです。

      パラメータ:
      text - 「--12-03」などの解析対象のテキスト。null以外
      戻り値:
      解析された月-日。null以外
      例外:
      DateTimeParseException - テキストが解析できない場合
    • parse

      public static MonthDay parse(CharSequence text, DateTimeFormatter formatter)
      特定のフォーマッタを使用して、テキスト文字列からMonthDayのインスタンスを取得します。

      そのテキストがフォーマッタを使って解析され、月-日が返されます。

      パラメータ:
      text - 解析するテキスト。null以外
      formatter - 使用するフォーマッタ、null以外
      戻り値:
      解析された月-日。null以外
      例外:
      DateTimeParseException - テキストが解析できない場合
    • isSupported

      public boolean isSupported(TemporalField field)
      指定されたフィールドがサポートされているかどうかをチェックします。

      これは、指定されたフィールドをこの月-日に問い合せることができるかどうかを確認します。 falseの場合、rangeメソッドとgetメソッドを呼び出すと例外がスローされます。

      フィールドがChronoFieldの場合、ここに問合せを実装します。 サポートされるフィールドは、次のとおりです。

      • MONTH_OF_YEAR
      • YEAR
      他のすべてのChronoFieldインスタンスはfalseを返します。

      フィールドがChronoFieldでない場合、このメソッドの結果は、thisを引数として渡してTemporalField.isSupportedBy(TemporalAccessor)を呼び出すことによって取得します。 フィールドがサポートされているかどうかはフィールドによって決定します。

      定義:
      インタフェースTemporalAccessorisSupported
      パラメータ:
      field - チェックするフィールド、nullはfalseを返す
      戻り値:
      フィールドがこの月-日でサポートされている場合はtrue、サポートされていない場合はfalse
    • range

      public ValueRange range(TemporalField field)
      指定されたフィールドの有効な値の範囲を取得します。

      範囲オブジェクトはフィールドの有効な最小値と最大値を表します。 この月-日は、返される範囲の精度を高めるために使用されます。 範囲を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。

      フィールドがChronoFieldの場合、ここに問合せを実装します。 サポートされるフィールドは適切な範囲のインスタンスを返します。 他のすべてのChronoFieldインスタンスはUnsupportedTemporalTypeExceptionをスローします。

      フィールドがChronoFieldではない場合、このメソッドの結果は、引数としてthisを渡してTemporalField.rangeRefinedBy(TemporalAccessor)を呼び出すことにより取得されます。 範囲を取得できるかどうかはフィールドによって決まります。

      定義:
      インタフェースTemporalAccessorrange
      パラメータ:
      field - 範囲を問い合わせるフィールド、null以外
      戻り値:
      フィールドの有効値の範囲。null以外
      例外:
      DateTimeException - フィールドの範囲を取得できない場合
      UnsupportedTemporalTypeException - フィールドがサポートされていない場合
    • get

      public int get(TemporalField field)
      指定されたフィールドの値をこの月-日からintとして取得します。

      これは、指定されたフィールドの値についてこの月/日に問い合せます。 返される値は常にフィールドの値の有効な範囲内になります。 値を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。

      フィールドがChronoFieldの場合、ここに問合せを実装します。 サポートされているフィールドは、この月-日に基づいて有効な値を返します。 他のすべてのChronoFieldインスタンスはUnsupportedTemporalTypeExceptionをスローします。

      フィールドがChronoFieldではない場合、このメソッドの結果は、引数としてthisを渡してTemporalField.getFrom(TemporalAccessor)を呼び出すことにより取得されます。 値を取得できるかどうか、および値が何を表すかは、フィールドによって決まります。

      定義:
      インタフェースTemporalAccessorget
      パラメータ:
      field - 取得するフィールド、null以外
      戻り値:
      フィールドの値
      例外:
      DateTimeException - フィールドの値を取得できない場合、または値がフィールドの有効な値の範囲外の場合
      UnsupportedTemporalTypeException - フィールドがサポートされていない場合、または値の範囲がintを超えている場合
      ArithmeticException - 数値のオーバーフローが発生した場合
    • getLong

      public long getLong(TemporalField field)
      指定されたフィールドの値をこの月-日からlongとして取得します。

      これは、指定されたフィールドの値についてこの月/日に問い合せます。 値を返せない場合は、フィールドがサポートされていないか他のなんらかの理由で、例外がスローされます。

      フィールドがChronoFieldの場合、ここに問合せを実装します。 サポートされているフィールドは、この月-日に基づいて有効な値を返します。 他のすべてのChronoFieldインスタンスはUnsupportedTemporalTypeExceptionをスローします。

      フィールドがChronoFieldではない場合、このメソッドの結果は、引数としてthisを渡してTemporalField.getFrom(TemporalAccessor)を呼び出すことにより取得されます。 値を取得できるかどうか、および値が何を表すかは、フィールドによって決まります。

      定義:
      インタフェースTemporalAccessorgetLong
      パラメータ:
      field - 取得するフィールド、null以外
      戻り値:
      フィールドの値
      例外:
      DateTimeException - フィールドの値を取得できない場合
      UnsupportedTemporalTypeException - フィールドがサポートされていない場合
      ArithmeticException - 数値のオーバーフローが発生した場合
    • getMonthValue

      public int getMonthValue()
      月フィールドを取得します(1-12)。

      このメソッドは、月を1-12のintとして返します。 getMonth()を呼び出すことで列挙型Monthが使用される場合は、アプリケーション・コードがより明確になることが多くなります。

      戻り値:
      月(1-12)
      関連項目:
    • getMonth

      public Month getMonth()
      列挙型Monthを使用して、月フィールドを取得します。

      このメソッドは、月を表す列挙型Monthを返します。 これによって、int値が意味する内容に関する混乱を回避できます。 プリミティブなint値にアクセスする必要がある場合、この列挙型はint値を提供します。

      戻り値:
      月。null以外
      関連項目:
    • getDayOfMonth

      public int getDayOfMonth()
      「月の日」フィールドを取得します。

      このメソッドは、「月の日」を表すプリミティブなint値を返します。

      戻り値:
      「月の日」(1-31)
    • isValidYear

      public boolean isValidYear(int year)
      この月-日に対して年が有効であるかどうかを確認します。

      このメソッドは、この月と日、および入力された年から有効な日付が形成されるかどうかを確認します。 これは、2月29日の場合にのみfalseを返す可能性があります。

      パラメータ:
      year - 検証する年
      戻り値:
      この月-日に対して年が有効である場合はtrue
      関連項目:
    • withMonth

      public MonthDay withMonth(int month)
      月を変更して、この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)メソッドを呼び出すことによって取得します。

      定義:
      インタフェースTemporalAccessorquery
      型パラメータ:
      R - 結果の型
      パラメータ:
      query - 呼び出す問合せ、null以外
      戻り値:
      問合せ結果、nullが返されることがある(問合せによって定義される)
      例外:
      DateTimeException - 問い合わせできない場合(問合せによって定義される)
      ArithmeticException - 数値のオーバーフローが発生した場合(問合せによって定義される)
    • adjustInto

      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);
       

      このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。

      定義:
      インタフェースTemporalAdjusteradjustInto
      パラメータ:
      temporal - 調整するターゲット・オブジェクト、null以外
      戻り値:
      調整されるオブジェクト、null以外
      例外:
      DateTimeException - 調整を実行できない場合
      ArithmeticException - 数値のオーバーフローが発生した場合
    • format

      public String format(DateTimeFormatter formatter)
      指定されたフォーマッタを使用してこの月-日を書式設定します。

      この月-日がフォーマッタに渡されて、文字列が生成されます。

      パラメータ:
      formatter - 使用するフォーマッタ、null以外
      戻り値:
      書式設定された月-日を表す文字列。null以外
      例外:
      DateTimeException - 出力時にエラーが発生した場合
    • atYear

      public LocalDate atYear(int year)
      この月-日を年と組み合せてLocalDateを作成します。

      これは、この月-日および指定された年から形成されたLocalDateを返します。

      2月29日という月-日は、その年がうるう年でなければ、結果となる日付で2月28日に調整されます。

      このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。

      パラメータ:
      year - 使用する年(MIN_YEARからMAX_YEARまで)
      戻り値:
      この月-日および指定された年から形成されたローカル日付。null以外
      例外:
      DateTimeException - その年が有効な年の範囲外にある場合
    • compareTo

      public int compareTo(MonthDay other)
      この月-日をもう一方の月-日と比較します。

      この比較は、まず月の値に基づいて行われ、次に日の値に基づいて行われます。 Comparableに定義されているとおりに、「equalsと一致」しています。

      定義:
      compareTo、インタフェースComparable<MonthDay>
      パラメータ:
      other - 比較対象のもう一方の月-日。null以外
      戻り値:
      コンパレータ値、小さい場合は負、大きい場合は正
    • isAfter

      public boolean isAfter(MonthDay other)
      この月/日が、指定された月/日より後にあるかどうかをチェックします。
      パラメータ:
      other - 比較対象のもう一方の月-日。null以外
      戻り値:
      これが指定された月-日より後にある場合はtrue
    • isBefore

      public boolean isBefore(MonthDay other)
      この月/日が、指定された月/日より前にあるかどうかをチェックします。
      パラメータ:
      other - 比較対象のもう一方の月-日。null以外
      戻り値:
      この時点が指定された月-日より前にある場合はtrue
    • equals

      public boolean equals(Object obj)
      この月-日がもう一方の月-日と等しいかどうかを確認します。

      この比較は、1年のうちのそれらの月-日の時系列上の位置に基づいています。

      オーバーライド:
      equals、クラスObject
      パラメータ:
      obj - チェックするオブジェクト、nullはfalseを返す
      戻り値:
      これがもう一方の月-日と等しい場合はtrue
      関連項目:
    • hashCode

      public int hashCode()
      この月-日のハッシュ・コードです。
      オーバーライド:
      hashCode、クラスObject
      戻り値:
      適切なハッシュ・コード
      関連項目:
    • toString

      public String toString()
      この月-日をStringとして出力します(--12-03など)。

      出力のフォーマットは--MM-ddになります。

      オーバーライド:
      toString、クラスObject
      戻り値:
      この月-日の文字列表現。null以外