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

クラスTemporalQueries


  • public final class TemporalQueries
    extends Object
    TemporalQueryの一般的な実装です。

    このクラスは、TemporalQueryの一般的な実装を提供します。 これらは定数である必要がありますが、ラムダの定義ではそれが保証されないため、ここで定義されます。 これらは、ここで1度割り当てることによって通常のJava定数になります。

    問合せは、時間的オブジェクトから情報を抽出するための主要なツールです。 それらは、戦略デザイン・パターンのように、問合せのプロセスを外部化して異なるアプローチを可能にするために存在します。 例として、日付がうるう年の2月29日の前日かどうかを確認する問合せや、次の誕生日までの日数を計算する問合せなどがあります。

    TemporalFieldインタフェースは、時間的オブジェクトを問い合せるもう1つのメカニズムを提供します。 そのインタフェースは、longを返すように制限されています。 これに対して、問合せは任意の型を返すことができます。

    TemporalQueryには、2つの同等な使用方法があります。 1つ目は、このインタフェース上でメソッドを直接呼び出す方法です。 2つ目は、TemporalAccessor.query(TemporalQuery)を使用する方法です。

       // these two lines are equivalent, but the second approach is recommended
       temporal = thisQuery.queryFrom(temporal);
       temporal = temporal.query(thisQuery);
     
    コード内での読みやすさが大幅に向上するため、2つ目のアプローチ(query(TemporalQuery))を使用することをお薦めします。

    もっとも一般的な実装は、LocalDate::fromZoneId::fromなどのメソッド参照です。 さらに、次を返す共通の問合せも提供されます。

    • Chronology
    • LocalDate
    • LocalTime
    • ZoneOffset
    • 精度
    • ゾーン
    • zoneId
    導入されたバージョン:
    1.8
    • メソッドの詳細

      • zoneId

        public static TemporalQuery<ZoneId> zoneId()
        ZoneIdの厳密な問合せ。

        これは、ゾーンのTemporalAccessorを問い合せます。 ゾーンが返されるのは、日付/時間に概念としてZoneIdが含まれる場合のみです。 日付/時間に概念としてZoneOffsetのみが含まれる場合は、返されません。 したがって、ZonedDateTimegetZone()の結果を返しますが、OffsetDateTimeはnullを返します。

        ほとんどの場合、この問合せは厳密すぎるため、アプリケーションではzone()を使用するようにしてください。

        TemporalAccessorを実装したJDKクラスの結果は次のようになります。
        LocalDateはnullを返す
        LocalTimeはnullを返す
        LocalDateTimeはnullを返す
        ZonedDateTimeは関連付けられたゾーンを返す
        OffsetTimeはnullを返す
        OffsetDateTimeはnullを返す
        ChronoLocalDateはnullを返す
        ChronoLocalDateTimeはnullを返す
        ChronoZonedDateTimeは関連付けられたゾーンを返す
        Eraはnullを返す
        DayOfWeekはnullを返す
        Monthはnullを返す
        Yearはnullを返す
        YearMonthはnullを返す
        MonthDayはnullを返す
        ZoneOffsetはnullを返す
        Instantはnullを返す

        戻り値:
        時間的オブジェクトのゾーンIDを取得できる問合せ、nullでない
      • chronology

        public static TemporalQuery<Chronology> chronology()
        Chronologyの問合せ。

        これは、暦のTemporalAccessorを問い合せます。 ターゲットのTemporalAccessorが日付または日付の一部を表す場合、これは日付の表現に使用されている暦を返す必要があります。 この定義の結果、時間のみを表すオブジェクト(LocalTimeなど)はnullを返します。

        TemporalAccessorを実装したJDKクラスの結果は次のようになります。
        LocalDateIsoChronology.INSTANCEを返す
        LocalTimeはnullを返す(日付を表さない)
        LocalDateTimeIsoChronology.INSTANCEを返す
        ZonedDateTimeIsoChronology.INSTANCEを返す
        OffsetTimeはnullを返す(日付を表さない)
        OffsetDateTimeIsoChronology.INSTANCEを返す
        ChronoLocalDateは関連付けられた暦を返す
        ChronoLocalDateTimeは関連付けられた暦を返す
        ChronoZonedDateTimeは関連付けられた暦を返す
        Eraは関連付けられた暦を返す
        DayOfWeekはnullを返す(複数の暦で共有される)
        MonthIsoChronology.INSTANCEを返す
        YearIsoChronology.INSTANCEを返す
        YearMonthIsoChronology.INSTANCEを返す
        MonthDayはnullのIsoChronology.INSTANCEを返す
        ZoneOffsetはnullを返す(日付を表さない)
        Instantはnullを返す(日付を表さない)

        Chronology.from(TemporalAccessor)メソッドは、メソッド参照(Chronology::from)を介してTemporalQueryとして使用できます。 そのメソッドはこの問合せと同等ですが、暦を取得できない場合に例外をスローする点が異なります。

        戻り値:
        時間的オブジェクトの暦を取得できる問合せ、nullでない
      • precision

        public static TemporalQuery<TemporalUnit> precision()
        サポートされる最小単位の問合せ。

        これは、時間の精度のTemporalAccessorを問い合せます。 ターゲットのTemporalAccessorが一貫した、または完全な日付/時間、日付または時間を表す場合、これは実際にサポートされている最小精度を返す必要があります。 NANO_OF_DAYNANO_OF_SECONDなどのフィールドは常に精度を無視して返すように定義されているため、これは実際にサポートされている最小単位を見つける唯一の方法です。 たとえば、GregorianCalendarTemporalAccessorを実装すると、精度としてMILLISが返されます。

        TemporalAccessorを実装したJDKクラスの結果は次のようになります。
        LocalDateDAYSを返す
        LocalTimeNANOSを返す
        LocalDateTimeNANOSを返す
        ZonedDateTimeNANOSを返す
        OffsetTimeNANOSを返す
        OffsetDateTimeNANOSを返す
        ChronoLocalDateDAYSを返す
        ChronoLocalDateTimeNANOSを返す
        ChronoZonedDateTimeNANOSを返す
        EraERASを返す
        DayOfWeekDAYSを返す
        MonthMONTHSを返す
        YearYEARSを返す
        YearMonthMONTHSを返す
        MonthDayはnullを返す(完全な日付または時間を表さない)
        ZoneOffsetはnullを返す(日付または時間を表さない)
        InstantNANOSを返す

        戻り値:
        時間的オブジェクトの精度を取得できる問合せ、nullでない
      • zone

        public static TemporalQuery<ZoneId> zone()
        ZoneOffsetにフォール・バックする、ZoneIdの厳密でないクエリーです。

        これは、ゾーンのTemporalAccessorを問い合せます。 最初にzoneId()を使用してゾーンを取得しようとします。 それが見つからない場合は、offset()を取得しようとします。 したがって、ZonedDateTimegetZone()の結果を返しますが、OffsetDateTimegetOffset()の結果を返します。

        ほとんどの場合、アプリケーションでは#zoneId()ではなくこの問合せを使用するようにしてください。

        ZoneId.from(TemporalAccessor)メソッドは、メソッド参照(ZoneId::from)を介してTemporalQueryとして使用できます。 そのメソッドはこの問合せと同等ですが、ゾーンを取得できない場合に例外をスローする点が異なります。

        戻り値:
        時間的オブジェクトのゾーンIDまたはオフセットを取得できる問合せ、nullでない
      • offset

        public static TemporalQuery<ZoneOffset> offset()
        ZoneOffsetの問合せ。見つからない場合はnullを返します。

        これは、オフセットの時間的オブジェクトを問い合せるために使用できるTemporalQueryを返します。 時間的オブジェクトがオフセットを提供できない場合、問合せはnullを返します。

        問合せの実装は、OFFSET_SECONDSフィールドを調べ、それを使用してZoneOffsetを作成します。

        ZoneOffset.from(TemporalAccessor)メソッドは、メソッド参照(ZoneOffset::from)を介してTemporalQueryとして使用できます。 時間的オブジェクトにオフセットが含まれている場合、この問合せとZoneOffset::fromは同じ結果を返します。 時間的オブジェクトにオフセットが含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。

        戻り値:
        時間的オブジェクトのオフセットを取得できる問合せ、nullでない
      • localDate

        public static TemporalQuery<LocalDate> localDate()
        見つからない場合はnullを返す、LocalDateの問合せ。

        これは、ローカル日付の時間的オブジェクトを問い合せるために使用できるTemporalQueryを返します。 時間的オブジェクトがローカル日付を提供できない場合、問合せはnullを返します。

        問合せの実装は、EPOCH_DAYフィールドを調べ、それを使用してLocalDateを作成します。

        ZoneOffset.from(TemporalAccessor)メソッドは、メソッド参照(LocalDate::from)を介してTemporalQueryとして使用できます。 時間的オブジェクトに日付が含まれている場合、この問合せとLocalDate::fromは同じ結果を返します。 時間的オブジェクトに日付が含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。

        戻り値:
        時間的オブジェクトの日付を取得できる問合せ、nullでない
      • localTime

        public static TemporalQuery<LocalTime> localTime()
        見つからない場合はnullを返す、LocalTimeの問合せ。

        これは、ローカル時間の時間的オブジェクトを問い合せるために使用できるTemporalQueryを返します。 時間的オブジェクトがローカル時間を提供できない場合、問合せはnullを返します。

        問合せの実装は、NANO_OF_DAYフィールドを調べ、それを使用してLocalTimeを作成します。

        ZoneOffset.from(TemporalAccessor)メソッドは、メソッド参照(LocalTime::from)を介してTemporalQueryとして使用できます。 時間的オブジェクトに時間が含まれている場合、この問合せとLocalTime::fromは同じ結果を返します。 時間的オブジェクトに時間が含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。

        戻り値:
        時間的オブジェクトの時間を取得できる問合せ、nullでない