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

インタフェースChronoLocalDate

  • すべてのスーパー・インタフェース:
    Comparable<ChronoLocalDate>, Temporal, TemporalAccessor, TemporalAdjuster
    既知のすべての実装クラス:
    HijrahDate, JapaneseDate, LocalDate, MinguoDate, ThaiBuddhistDate

    public interface ChronoLocalDate
    extends Temporal, TemporalAdjuster, Comparable<ChronoLocalDate>
    任意の暦で時またはタイム・ゾーンのない日付、高度なグローバリゼーション・ユース・ケース向けです。

    ほとんどのアプリケーションでは、メソッド・シグネチャ、フィールド、および変数をこのインタフェースではなく、LocalDateとして宣言してください。

    ChronoLocalDateは、Chronology chronologyまたは暦体系がプラガブルである場合の日付の抽象表現です。 日付はTemporalFieldによって表されるフィールドの形で定義され、ほとんどの一般的な実装がChronoFieldに定義されます。 暦は暦体系の動作と標準フィールドの意味を定義します。

    このインタフェースを使用するタイミング

    アプリケーションで複数の暦体系を処理する必要がある場合でも、APIの設計では、このインタフェースよりLocalDateの使用が推奨されます。

    アプリケーションをグローバル化する方法として自然なのは暦体系を抽象化することのように最初は思えるため、初めはこの考え方に驚くかもしれません。 しかし、この後説明するように、暦体系を抽象化することは通常は誤ったアプローチであり、ロジック・エラーが生じたり不具合の特定が困難になる原因となります。 そのため、LocalDateではなく、このインタフェースを使用することを選択することは、アプリケーション規模のアーキテクチャの決定と考えてください。

    考慮すべきアーキテクチャ上の問題

    アプリケーション全体でこのインタフェースを使用する前に、考慮する必要があるいくつかの点があります。

    1) LocalDateだけを使用する場合に対して、このインタフェースを使用するアプリケーションは、大幅にバグの可能性が高くなります。 これは、開発時に、使用する暦体系がわからないためです。 バグの主な原因は、開発者が、ISO暦体系についての日常の知識による想定を、任意の暦体系の処理を目的とするコードに適用する場合にあります。 以下のセクションで、それらの想定が、どのように問題を引き起こす可能性があるのかを説明しています。この高いバグのリスクを緩和するための主なメカニズムは、強力なコード・レビュー・プロセスです。 さらに、コードの存続期間中のメンテナンスにおける余分なコストも考慮すべきです。

    2) このインタフェースは実装の不変性を強制しません。 実装のノートでは、すべての実装が不変でなければならないと示していますが、コードまたは型システムにはこれを強制するものがありません。 したがって、ChronoLocalDateを受け付けるように宣言されたメソッドには、不完全または悪意を持って書かれた可変の実装が渡される可能性があります。

    3) このインタフェースを使用するアプリケーションは紀元の影響を考慮する必要があります。 LocalDateは、getYear()が先発暦の年を返すようにすることで、ユーザーから紀元の概念を隠しています。 その決定によって、開発者はLocalDateインスタンスを、年、月、「月の日」の3つのフィールドから構成されるものと考えることができます。 これに対し、このインタフェースのユーザーは、日付を紀元、紀元年、月、および「月の日」の4つのフィールドから構成されるものとして考える必要があります。 余分な紀元フィールドは、任意の暦体系の日付にきわめて重要ですが、よく忘れられます。 たとえば、日本の暦体系では、紀元は天皇の在位期間を表します。 ある統治期間が終了すると、次が開始し、紀元年が1にリセットされます。

    4) 2つのシステム間で日付を渡す唯一の合意された国際規格は、ISO暦体系を必要とするISO-8601規格です。 アプリケーション全体でこのインタフェースを使用することは、必然的にネットワークやコンポーネントの境界を越えて日付を渡す要件が発生し、アプリケーション固有のプロトコルや形式が必要になります。

    5) データベースなどの長期の永続性では、ほとんど常に、ISO-8601暦体系(または関連のユリウス/グレゴリオ暦)の日付のみを受け付けます。 他の暦体系間で日付を渡し合うことは、永続性との対話の複雑さが増します。

    6) 下記の最後のセクションで説明するように、たいていの場合、アプリケーション全体でChronoLocalDateを渡すことは不要です。

    誤った想定によってマルチ暦体系のコードのバグが発生する

    上記のように、任意の暦体系の日付を使用し、操作しようとする場合には考慮すべき多くの問題があります。 これらは主な問題の一部です。

    「月の日」を問い合わせ、その値が31を超えることはないものと想定するコードは無効です。 一部の暦体系では、一部の月で31日を超えます。

    日付に12か月を加算して、1年が追加されたものと想定するコードは無効です。 コプト暦やエチオピア暦の13など、一部の暦体系では月数が異なります。

    日付に1か月を加算して、その月値が1増加するか、または次の年にまたがるものと想定するコードは無効です。 ヘブライ暦など、一部の暦体系では1年の月数がさまざまに異なります。

    1か月を加算し、次に2つ目の1か月を加算して、「月の日」がその元の値に近いままであるものと想定するコードは無効です。 一部の暦体系では、最長の月の長さと最短の月の長さが大きく異なります。 たとえば、コプト暦やエチオピア暦では、12か月が30日で、1か月が5日です。

    7日を加算して、1週間が加算されたものと想定するコードは無効です。 フランス革命暦など、一部の暦体系では、7日以外の週があります。

    date1の年がdate2の年より大きいため、date1date2より後であるものと想定するコードは無効です。 これは、紀元年を参照する場合に、すべての暦体系で無効であり、特に紀元年が新しい天皇の在位期間のたびに再開される日本の暦体系にはあてはまりません。

    年の開始として、月を1、「月の日」を1と処理するコードは無効です。 すべての暦体系で、月の値が1の場合に年が始まるとは限りません。

    一般に、日付の操作や日付の問合せでは、開発時に暦体系が不明な場合に、バグが発生する可能性が高くなります。 このため、このインタフェースを使用するコードは、追加のコード・レビューが不可欠です。 また、それは、このインタフェース・タイプを避けるアーキテクチャ上の決定が、通常正しい決定である理由でもあります。

    代わりにLocalDateを使用する

    アプリケーション全体でこのインタフェースを使用することの主な代替策は次のようになります。
    • 日付を参照するすべてのメソッド・シグネチャをLocalDateの形で宣言します。
    • 暦(暦体系)をユーザー・プロファイルに保存するか、またはユーザー・ロケールから暦を検索します。
    • 出力および解析時に、ISO LocalDateとユーザーの優先される暦体系間で変換します。
    このアプローチでは、グローバル化される暦体系の問題をローカライズの問題として扱い、それをUIレイヤーに限定します。 このアプローチは、Javaプラットフォームの他のローカリゼーションの問題に合わせています。

    上記のように、暦体系のルールがプラガブルである場合の日付の計算の実行には、スキルが必要であり、推奨されません。 幸い、任意の暦体系の日付の計算を実行する必要性はきわめてまれです。 たとえば、図書館の書籍の有料貸出スキームのビジネス・ルールで、1か月の貸出が可能で、その場合の月の意味がユーザーの優先される暦体系に依存することは、ほとんどあり得ません。

    任意の暦体系の日付の計算の主なユース・ケースは、表示とユーザーとの対話用に、月別のカレンダを生成することです。 繰り返しますが、これはUIの問題であり、UIレイヤーの少数のメソッド内でのみこのインタフェースを使用することが、理にかなっていると考えられます。

    システムの他の部分で、ISO以外の暦体系で日付を操作する必要がある場合、ユース・ケースは一般に使用する暦体系を指定します。 たとえば、アプリケーションで次のイスラム暦またはヘブライ暦の休日を計算する必要があり、日付を操作する必要があるとします。 このような種類のユース・ケースは次のように処理できます。

    • メソッドに渡されるISO LocalDateから開始する
    • その日付を、任意ではなくこのユース・ケースで既知の代替の暦体系に変換する
    • 計算を実行する
    • LocalDateに変換して戻す
    下位レベルのフレームワークまたはライブラリを書く開発者もこのインタフェースを避けるようにしてください。 代わりに、2つの汎用アクセス・インタフェースのいずれかを使用してください。 読取り専用アクセスが必要な場合はTemporalAccessorを使用し、読取り/書込みアクセスが必要な場合はTemporalを使用します。

    実装要件:
    このインタフェースは、他のクラスが正常に動作するように、注意して実装する必要があります。 インスタンス化可能なすべての実装は、最終、不変、およびスレッドセーフである必要があります。 サブクラスは、可能であれば直列化可能にしてください。

    追加の暦体系をシステムに追加できます。 詳細についてはChronologyを参照してください。

    導入されたバージョン:
    1.8
    • メソッドのサマリー

      すべてのメソッド staticメソッド インスタンス・メソッド 抽象メソッド デフォルト・メソッド 
      修飾子と型 メソッド 説明
      default Temporal adjustInto​(Temporal temporal)
      指定された一時オブジェクトをこのオブジェクトと同じ日付になるように調整します。
      default ChronoLocalDateTime<?> atTime​(LocalTime localTime)
      この日付を時間と組み合わせて、ChronoLocalDateTimeを作成します。
      default int compareTo​(ChronoLocalDate other)
      暦を含めて、この日付を別の日付と比較します。
      boolean equals​(Object obj)
      暦を含めて、この日付が別の日付と等しいかどうかをチェックします。
      default String format​(DateTimeFormatter formatter)
      指定されたフォーマッタを使用してこの日付を書式設定します。
      static ChronoLocalDate from​(TemporalAccessor temporal)
      一時オブジェクトからChronoLocalDateのインスタンスを取得します。
      Chronology getChronology()
      この日付の暦を取得します。
      default Era getEra()
      暦によって定義された、紀元を取得します。
      int hashCode()
      この日付のハッシュ・コード。
      default boolean isAfter​(ChronoLocalDate other)
      暦を無視して、この日付が、指定された日付の後であるかどうかをチェックします。
      default boolean isBefore​(ChronoLocalDate other)
      暦を無視して、この日付が、指定された日付の前であるかどうかをチェックします。
      default boolean isEqual​(ChronoLocalDate other)
      暦を無視して、この日付が、指定された日付と等しいかどうかをチェックします。
      default boolean isLeapYear()
      暦体系によって定義されているとおりに、年がうるう年であるかどうかをチェックします。
      default boolean isSupported​(TemporalField field)
      指定されたフィールドがサポートされているかどうかをチェックします。
      default boolean isSupported​(TemporalUnit unit)
      指定された単位がサポートされているかどうかをチェックします。
      int lengthOfMonth()
      暦体系によって定義されているとおりに、この日付によって表されている月の長さを返します。
      default int lengthOfYear()
      暦体系によって定義されているとおりに、この日付によって表されている年の長さを返します。
      default ChronoLocalDate minus​(long amountToSubtract, TemporalUnit unit)
      指定された期間を減算して、このオブジェクトと同じ型のオブジェクトを返します。
      default ChronoLocalDate minus​(TemporalAmount amount)
      量を減算して、このオブジェクトと同じ型のオブジェクトを返します。
      default ChronoLocalDate plus​(long amountToAdd, TemporalUnit unit)
      このオブジェクトと同じ型のオブジェクトに指定された期間を追加したものを返します。
      default ChronoLocalDate plus​(TemporalAmount amount)
      このオブジェクトと同じ型のオブジェクトにある時間を追加したものを返します。
      default <R> R query​(TemporalQuery<R> query)
      指定された問合せを使用してこの日付を問い合わせます。
      static Comparator<ChronoLocalDate> timeLineOrder()
      暦を無視して時系列順にChronoLocalDateを比較するコンパレータを取得します。
      default long toEpochDay()
      この日付をエポック日に変換します。
      String toString()
      この日付をStringとして出力します。
      ChronoPeriod until​(ChronoLocalDate endDateExclusive)
      この日付からもう一方の日付までの期間をChronoPeriodとして計算します。
      long until​(Temporal endExclusive, TemporalUnit unit)
      もう一方の日付までの時間量を指定された単位で計算します。
      default ChronoLocalDate with​(TemporalAdjuster adjuster)
      調整を行って、このオブジェクトと同じ型の調整済のオブジェクトを返します。
      default ChronoLocalDate with​(TemporalField field, long newValue)
      指定されたフィールドを変更して、このオブジェクトと同じ型のオブジェクトを返します。
    • メソッドの詳細

      • from

        static ChronoLocalDate from​(TemporalAccessor temporal)
        一時オブジェクトからChronoLocalDateのインスタンスを取得します。

        これは、指定されたtemporal (一時)に基づいてローカル日付を取得します。 TemporalAccessorは任意の日付と時間情報のセットを表し、このファクトリがChronoLocalDateのインスタンスに変換します。

        変換では、一時オブジェクトから暦と日付を抽出し、組み合わせます。 この動作は、抽出された暦でChronology.date(TemporalAccessor)を使用する場合と同等です。 実装では、関連オブジェクトと同等のそれらのフィールドにアクセスするなどの最適化を実行することが許可されます。

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

        パラメータ:
        temporal - 変換する一時オブジェクト、null以外
        戻り値:
        日付、null以外
        例外:
        DateTimeException - ChronoLocalDateに変換できない場合
        関連項目:
        Chronology.date(TemporalAccessor)
      • getChronology

        Chronology getChronology()
        この日付の暦を取得します。

        Chronologyは使用中の暦体系を表します。 ChronoFieldの紀元およびその他のフィールドは暦によって定義されます。

        戻り値:
        暦、null以外
      • getEra

        default Era getEra()
        暦によって定義された、紀元を取得します。

        この紀元は概念上、時系列の最大の区分です。 ほとんどの暦体系には、時系列を2つの紀元に分割する1つのエポックがあります。 ただし、一部には各指導者の統治期間に1つずつなど、複数の紀元があります。 正確な意味はChronologyによって決定されます。

        正しく実装されたすべてのEraクラスはシングルトンであるため、date.getEra() == SomeChrono.ERA_NAME)と書くことは有効なコードです。

        このデフォルトの実装ではChronology.eraOf(int)を使用します。

        戻り値:
        この日付に適用できる暦固有の紀元定数、null以外
      • isLeapYear

        default boolean isLeapYear()
        暦体系によって定義されているとおりに、年がうるう年であるかどうかをチェックします。

        うるう年は通常より長い年です。 正確な意味は、うるう年がうるう年以外の年より長いyear-lengthを暗黙的に示す必要がある制約のある暦によって決定されます。

        このデフォルトの実装ではChronology.isLeapYear(long)を使用します。

        戻り値:
        日付がうるう年にある場合はtrue、それ以外の場合はfalse
      • lengthOfMonth

        int lengthOfMonth()
        暦体系によって定義されているとおりに、この日付によって表されている月の長さを返します。

        これは月の長さを日数で返します。

        戻り値:
        日数での月の長さ
      • lengthOfYear

        default int lengthOfYear()
        暦体系によって定義されているとおりに、この日付によって表されている年の長さを返します。

        これは年の長さを日数で返します。

        デフォルトの実装ではisLeapYear()を使用し、365または366を返します。

        戻り値:
        日数での年の長さ
      • isSupported

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

        これは、指定されたフィールドをこの日付で問い合わせできるかどうかをチェックします。 falseの場合、rangeget、およびwith(TemporalField, long)メソッドの呼び出しは、例外をスローします。

        一連のサポートされるフィールドは、暦によって定義され、通常すべてのChronoField日付フィールドを含みます。

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

        定義:
        インタフェースTemporalAccessorisSupported
        パラメータ:
        field - チェックするフィールド、nullはfalseを返す
        戻り値:
        フィールドを問い合わせできる場合はtrue、そうでない場合はfalse
      • isSupported

        default boolean isSupported​(TemporalUnit unit)
        指定された単位がサポートされているかどうかをチェックします。

        これは、指定された単位をこの日付に加算または減算できるかどうかをチェックします。 falseの場合、plus(long, TemporalUnit)およびminusメソッドの呼び出しは、例外をスローします。

        一連のサポートされる単位は、暦によって定義され、通常、FOREVERを除くすべてのChronoUnit日付単位を含みます。

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

        定義:
        インタフェースTemporalisSupported
        パラメータ:
        unit - チェックする単位、nullはfalseを返す
        戻り値:
        単位を加算/減算できる場合はtrue、できない場合はfalse
      • with

        default ChronoLocalDate with​(TemporalAdjuster adjuster)
        調整を行って、このオブジェクトと同じ型の調整済のオブジェクトを返します。

        これは、指定されたアジャスタのルールに従って、この日付/時間を調整します。 単純なアジャスタは、年フィールドなどの1つのフィールドだけを設定するなどです。 複雑なアジャスタは、日付を月の最後の日に設定するなどです。 一般的な調整の選択は、TemporalAdjustersで指定します。 これらには、「月の最後の日」や「次の水曜日」を見つけることが含まれます。 アジャスタは、さまざまな長さの月やうるう年などの特別なケースの処理を担当します。

        このメソッドを使用する方法と理由を示すいくつかのサンプル・コード:

          date = date.with(Month.JULY);        // most key classes implement TemporalAdjuster
          date = date.with(lastDayOfMonth());  // static import from Adjusters
          date = date.with(next(WEDNESDAY));   // static import from Adjusters and DayOfWeek
         

        定義:
        インタフェースTemporalwith
        パラメータ:
        adjuster - 使用するアジャスタ、null以外
        戻り値:
        指定された調整を行った同じ型のオブジェクト、null以外
        例外:
        DateTimeException - 調整を実行できない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • with

        default ChronoLocalDate with​(TemporalField field,
                                     long newValue)
        指定されたフィールドを変更して、このオブジェクトと同じ型のオブジェクトを返します。

        これは、指定されたフィールドの値を変更して、このオブジェクトに基づいて新しいオブジェクトを返します。 たとえば、LocalDateで、これは年、月、または「月の日」を設定するために使用できます。 返されるオブジェクトはこのオブジェクトと同じ識別可能な型を持ちます。

        フィールドの変更が完全には定義されていない場合もあります。 たとえば、ターゲット・オブジェクトが1月31日を表す日付である場合、月を2月に変更することは不明な場合があります。 このようなケースでは、フィールドは結果の解決を担当します。 通常は1つ前の有効な日付が選択され、この例の場合は2月の最後の有効な日になります。

        定義:
        インタフェースTemporalwith
        パラメータ:
        field - 結果に設定するフィールド、null以外
        newValue - 結果のフィールドの新しい値
        戻り値:
        指定されたフィールドが設定された同じ型のオブジェクト、null以外
        例外:
        DateTimeException - フィールドを設定できない場合
        UnsupportedTemporalTypeException - フィールドがサポートされていない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • plus

        default ChronoLocalDate plus​(TemporalAmount amount)
        このオブジェクトと同じ型のオブジェクトにある時間を追加したものを返します。

        これは、このtemporal (一時)を調整し、指定された量のルールに従って加算します。 この量は通常Periodですが、Durationなど、TemporalAmountインタフェースを実装する他のどの型であってもかまいません。

        このメソッドを使用する方法と理由を示すいくつかのサンプル・コード:

          date = date.plus(period);                // add a Period instance
          date = date.plus(duration);              // add a Duration instance
          date = date.plus(workingDays(6));        // example user-written workingDays method
         

        plusの後にminusを呼び出しても、同じ日付/時間が返されることは保証されません。

        定義:
        インタフェースTemporalplus
        パラメータ:
        amount - 追加する量、null以外
        戻り値:
        指定された調整を行った同じ型のオブジェクト、null以外
        例外:
        DateTimeException - 加算できない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • plus

        default ChronoLocalDate plus​(long amountToAdd,
                                     TemporalUnit unit)
        このオブジェクトと同じ型のオブジェクトに指定された期間を追加したものを返します。

        このメソッドは、指定された期間を加算して、このオブジェクトに基づいて新しいオブジェクトを返します。 たとえば、LocalDateで、これは年、月、または日の数を加算するために使用できます。 返されるオブジェクトはこのオブジェクトと同じ識別可能な型を持ちます。

        フィールドの変更が完全には定義されていない場合もあります。 たとえば、ターゲット・オブジェクトが1月31日を表す日付である場合、1か月を加算することは不明な場合があります。 このようなケースでは、フィールドは結果の解決を担当します。 通常は1つ前の有効な日付が選択され、この例の場合は2月の最後の有効な日になります。

        定義:
        インタフェースTemporalplus
        パラメータ:
        amountToAdd - 加算する指定された単位の量、負の場合もある
        unit - 加算する量の単位、nullでない
        戻り値:
        指定された期間を加算した同じ型のオブジェクト、null以外
        例外:
        DateTimeException - 単位を加算できない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • minus

        default ChronoLocalDate minus​(TemporalAmount amount)
        量を減算して、このオブジェクトと同じ型のオブジェクトを返します。

        これは、このtemporal (一時)を調整し、指定された量のルールに従って減算します。 この量は通常Periodですが、Durationなど、TemporalAmountインタフェースを実装する他のどの型であってもかまいません。

        このメソッドを使用する方法と理由を示すいくつかのサンプル・コード:

          date = date.minus(period);               // subtract a Period instance
          date = date.minus(duration);             // subtract a Duration instance
          date = date.minus(workingDays(6));       // example user-written workingDays method
         

        plusの後にminusを呼び出しても、同じ日付/時間が返されることは保証されません。

        定義:
        インタフェースTemporalminus
        パラメータ:
        amount - 減算する量、null以外
        戻り値:
        指定された調整を行った同じ型のオブジェクト、null以外
        例外:
        DateTimeException - 減算ができない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • minus

        default ChronoLocalDate minus​(long amountToSubtract,
                                      TemporalUnit unit)
        指定された期間を減算して、このオブジェクトと同じ型のオブジェクトを返します。

        このメソッドは、指定された期間を減算して、このオブジェクトに基づいて新しいオブジェクトを返します。 たとえば、LocalDateで、これは年、月、または日の数を減算するために使用できます。 返されるオブジェクトはこのオブジェクトと同じ識別可能な型を持ちます。

        フィールドの変更が完全には定義されていない場合もあります。 たとえば、ターゲットオブジェクトが3月31日を表す日付である場合、1か月を減算することは不明な場合があります。 このようなケースでは、フィールドは結果の解決を担当します。 通常は1つ前の有効な日付が選択され、この例の場合は2月の最後の有効な日になります。

        定義:
        インタフェースTemporalminus
        パラメータ:
        amountToSubtract - 減算する指定された単位の量、負の場合もある
        unit - 減算する量の単位、nullでない
        戻り値:
        指定された期間が減算された同じ型のオブジェクト、null以外
        例外:
        DateTimeException - 単位を減算できない場合
        UnsupportedTemporalTypeException - 単位がサポートされていない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • query

        default <R> R query​(TemporalQuery<R> query)
        指定された問合せを使用してこの日付を問い合わせます。

        これは指定された問合せ戦略オブジェクトを使用してこの日付を問い合わせます。 TemporalQueryオブジェクトは結果を取得するために使用するロジックを定義します。 このメソッドの結果を理解するには、問合せのドキュメントをお読みください。

        このメソッドの結果は、thisを引数として渡して、指定した問合せでTemporalQuery.queryFrom(TemporalAccessor)メソッドを呼び出すことによって取得します。

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

        default Temporal adjustInto​(Temporal temporal)
        指定された一時オブジェクトをこのオブジェクトと同じ日付になるように調整します。

        これは、日付をこれと同じになるように変更して、入力と同じ識別可能な型の一時オブジェクトを返します。

        調整は、ChronoField.EPOCH_DAYをフィールドとして渡してTemporal.with(TemporalField, long)を使用する場合と同等です。

        ほとんどのケースで、Temporal.with(TemporalAdjuster)を使用して、呼び出しパターンを逆にすると明確になります。

           // these two lines are equivalent, but the second approach is recommended
           temporal = thisLocalDate.adjustInto(temporal);
           temporal = temporal.with(thisLocalDate);
         

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

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

        long until​(Temporal endExclusive,
                   TemporalUnit unit)
        もう一方の日付までの時間量を指定された単位で計算します。

        これは、1つのTemporalUnitの形で2つのChronoLocalDateオブジェクト間の時間の量を計算します。 開始点と終了点はthisと指定された日付です。 終了が開始より前である場合、結果は負になります。 このメソッドに渡されたTemporalChronology.date(TemporalAccessor)を使用してChronoLocalDateに変換されます。 計算では、2つの日付間の完全な単位の数を表す整数を返します。 たとえば、2つの日付間の日数での量は、startDate.until(endDate, DAYS)を使用して計算できます。

        このメソッドを使用する等価な方法が2つあります。 1つ目はこのメソッドを呼び出すことです。 2つ目はTemporalUnit.between(Temporal, Temporal)を使用することです。

           // these two lines are equivalent
           amount = start.until(end, MONTHS);
           amount = MONTHS.between(start, end);
         
        この選択は、コードが読みやすくなるのはどちらかに基づいて行ってください。

        計算はChronoUnitのこのメソッドに実装します。 単位DAYSWEEKSMONTHSYEARSDECADESCENTURIESMILLENNIA、およびERASはすべての実装でサポートしてください。 その他のChronoUnit値は例外をスローします。

        単位がChronoUnitでない場合、このメソッドの結果は、thisを1つ目の引数として、変換される入力temporal (一時)を2つ目の引数として渡してTemporalUnit.between(Temporal, Temporal)を呼び出すことによって取得します。

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

        定義:
        インタフェースTemporaluntil
        パラメータ:
        endExclusive - 終了日、排他的、同じ暦でChronoLocalDateに変換される、null以外
        unit - 量を測定する単位、null以外
        戻り値:
        この日付と終了日の間の時間の量
        例外:
        DateTimeException - 量を計算できない場合や、終了temporal (一時)をChronoLocalDateに変換できない場合
        UnsupportedTemporalTypeException - 単位がサポートされていない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • until

        ChronoPeriod until​(ChronoLocalDate endDateExclusive)
        この日付からもう一方の日付までの期間をChronoPeriodとして計算します。

        これは2つの日付間の期間を計算します。 提供されたすべての暦で、年、月、日を使用して期間が計算されますが、ChronoPeriod APIでは、他の単位を使用して期間を表現できます。

        開始点と終了点はthisと指定された日付です。 終了が開始より前である場合、結果は負になります。 マイナス記号は年、月、日のそれぞれで同じになります。

        計算はこの日付の暦を使用して実行されます。 必要に応じて、入力日が一致するように変換されます。

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

        パラメータ:
        endDateExclusive - 終了日、排他的、任意の暦で可能、null以外
        戻り値:
        この日付と終了日の間の期間、null以外
        例外:
        DateTimeException - 期間を計算できない場合
        ArithmeticException - 数値のオーバーフローが発生した場合
      • format

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

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

        デフォルトの実装は次のように動作する必要があります。

          return formatter.format(this);
         

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

        default ChronoLocalDateTime<?> atTime​(LocalTime localTime)
        この日付を時間と組み合わせて、ChronoLocalDateTimeを作成します。

        これは、指定された時間でこの日付から形成されたChronoLocalDateTimeを返します。 日付と時間のすべての可能性のある組合わせが有効です。

        パラメータ:
        localTime - 使用するローカル時間、null以外
        戻り値:
        この日付と指定された時間から形成されたローカル日付/時間、null以外
      • toEpochDay

        default long toEpochDay()
        この日付をエポック日に変換します。

        Epoch Day countは日の単純な増分カウントで、日0は1970-01-01 (ISO)です。 この定義は、すべての暦で同じであり、変換が可能です。

        このデフォルトの実装は、EPOCH_DAYフィールドを問い合わせます。

        戻り値:
        Epoch Dayはこの日付に相当します。
      • compareTo

        default int compareTo​(ChronoLocalDate other)
        暦を含めて、この日付を別の日付と比較します。

        比較は、まず基礎となる時系列の日付に基づき、次に暦に基づきます。 Comparableに定義されているとおりに、「equalsと一致」しています。

        たとえば、以下はコンパレータの順序です。

        1. 2012-12-03 (ISO)
        2. 2012-12-04 (ISO)
        3. 2555-12-04 (ThaiBuddhist)
        4. 2012-12-05 (ISO)
        2番と3番の値は時系列で同じ日付を表します。 2つの値が同じ日付を表す場合、それらを識別するために、暦IDが比較されます。 このステップは、順序を「equalsと一致」させるために必要です。

        比較対象のすべての日付オブジェクトが同じ暦にある場合、追加の暦ステージは必要なく、ローカル日付のみが使用されます。 2つの異なる暦の日付など、2つのTemporalAccessorインスタンスの日付を比較するには、コンパレータとしてChronoField.EPOCH_DAYを使用します。

        このデフォルトの実装は、上で定義されている比較を実行します。

        定義:
        インタフェースComparable<ChronoLocalDate>compareTo
        パラメータ:
        other - 比較する他方の日付、null以外
        戻り値:
        コンパレータ値、小さい場合は負、大きい場合は正
      • isAfter

        default boolean isAfter​(ChronoLocalDate other)
        暦を無視して、この日付が、指定された日付の後であるかどうかをチェックします。

        このメソッドは、基礎となる日付のみを比較し、暦を比較しない点で、compareTo(java.time.chrono.ChronoLocalDate)での比較と異なります。 これにより、異なる暦体系の日付を、時系列の位置に基づいて比較できます。 これは、date1.toEpochDay() > date2.toEpochDay()を使用する場合と同等です。

        このデフォルトの実装は、エポック日に基づいて比較を実行します。

        パラメータ:
        other - 比較する他方の日付、null以外
        戻り値:
        これが、指定された日付より後である場合はtrue
      • isBefore

        default boolean isBefore​(ChronoLocalDate other)
        暦を無視して、この日付が、指定された日付の前であるかどうかをチェックします。

        このメソッドは、基礎となる日付のみを比較し、暦を比較しない点で、compareTo(java.time.chrono.ChronoLocalDate)での比較と異なります。 これにより、異なる暦体系の日付を、時系列の位置に基づいて比較できます。 これは、date1.toEpochDay() < date2.toEpochDay()を使用する場合と同等です。

        このデフォルトの実装は、エポック日に基づいて比較を実行します。

        パラメータ:
        other - 比較する他方の日付、null以外
        戻り値:
        これが、指定された日付より前である場合はtrue
      • isEqual

        default boolean isEqual​(ChronoLocalDate other)
        暦を無視して、この日付が、指定された日付と等しいかどうかをチェックします。

        このメソッドは、基礎となる日付のみを比較し、暦を比較しない点で、compareTo(java.time.chrono.ChronoLocalDate)での比較と異なります。 これにより、異なる暦体系の日付を、時系列の位置に基づいて比較できます。 これは、date1.toEpochDay() == date2.toEpochDay()を使用する場合と同等です。

        このデフォルトの実装は、エポック日に基づいて比較を実行します。

        パラメータ:
        other - 比較する他方の日付、null以外
        戻り値:
        基礎となる日付が、指定された日付と等しい場合はtrue
      • equals

        boolean equals​(Object obj)
        暦を含めて、この日付が別の日付と等しいかどうかをチェックします。

        この日付を別の日付と比較して、日付と暦が同じであることを確認します。

        2つの異なる暦の日付など、2つのTemporalAccessorインスタンスの日付を比較するには、コンパレータとしてChronoField.EPOCH_DAYを使用します。

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

        String toString()
        この日付をStringとして出力します。

        出力には、完全なローカル日付が含まれます。

        オーバーライド:
        toString、クラスObject
        戻り値:
        書式設定済の日付、null以外