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

クラスTemporalQueries

java.lang.Object
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でない