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::from
やZoneId::from
などのメソッド参照です。さらに、次を返す共通の問合せも提供されます。
修飾子と型 | メソッドと説明 |
---|---|
static TemporalQuery<Chronology> |
chronology()
Chronology の問合せ。 |
static TemporalQuery<LocalDate> |
localDate()
見つからない場合はnullを返す、
LocalDate の問合せ。 |
static TemporalQuery<LocalTime> |
localTime()
見つからない場合はnullを返す、
LocalTime の問合せ。 |
static TemporalQuery<ZoneOffset> |
offset()
ZoneOffset の問合せ。見つからない場合はnullを返します。 |
static TemporalQuery<TemporalUnit> |
precision()
サポートされる最小単位の問合せ。
|
static TemporalQuery<ZoneId> |
zone()
ZoneOffset にフォール・バックする、ZoneId の厳密でないクエリーです。 |
static TemporalQuery<ZoneId> |
zoneId()
ZoneId の厳密な問合せ。 |
public static TemporalQuery<ZoneId> zoneId()
ZoneId
の厳密な問合せ。
これは、ゾーンのTemporalAccessor
を問い合せます。ゾーンが返されるのは、日付/時間に概念としてZoneId
が含まれる場合のみです。日付/時間に概念としてZoneOffset
のみが含まれる場合は、返されません。したがって、ZonedDateTime
はgetZone()
の結果を返しますが、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を返す
public static TemporalQuery<Chronology> chronology()
Chronology
の問合せ。
これは、暦のTemporalAccessor
を問い合せます。ターゲットのTemporalAccessor
が日付または日付の一部を表す場合、これは日付の表現に使用されている暦を返す必要があります。この定義の結果、時間のみを表すオブジェクト(LocalTime
など)はnullを返します。
TemporalAccessor
を実装したJDKクラスの結果は次のようになります。LocalDate
はIsoChronology.INSTANCE
を返すLocalTime
はnullを返す(日付を表さない)LocalDateTime
はIsoChronology.INSTANCE
を返すZonedDateTime
はIsoChronology.INSTANCE
を返すOffsetTime
はnullを返す(日付を表さない)OffsetDateTime
はIsoChronology.INSTANCE
を返すChronoLocalDate
は関連付けられた暦を返すChronoLocalDateTime
は関連付けられた暦を返すChronoZonedDateTime
は関連付けられた暦を返すEra
は関連付けられた暦を返すDayOfWeek
はnullを返す(複数の暦で共有される)Month
はIsoChronology.INSTANCE
を返すYear
はIsoChronology.INSTANCE
を返すYearMonth
はIsoChronology.INSTANCE
を返すMonthDay
はnullのIsoChronology.INSTANCE
を返すZoneOffset
はnullを返す(日付を表さない)Instant
はnullを返す(日付を表さない)
Chronology.from(TemporalAccessor)
メソッドは、メソッド参照(Chronology::from
)を介してTemporalQuery
として使用できます。そのメソッドはこの問合せと同等ですが、暦を取得できない場合に例外をスローする点が異なります。
public static TemporalQuery<TemporalUnit> precision()
これは、時間の精度のTemporalAccessor
を問い合せます。ターゲットのTemporalAccessor
が一貫した、または完全な日付/時間、日付または時間を表す場合、これは実際にサポートされている最小精度を返す必要があります。NANO_OF_DAY
やNANO_OF_SECOND
などのフィールドは常に精度を無視して返すように定義されているため、これは実際にサポートされている最小単位を見つける唯一の方法です。たとえば、GregorianCalendar
にTemporalAccessor
を実装すると、精度としてMILLIS
が返されます。
TemporalAccessor
を実装したJDKクラスの結果は次のようになります。LocalDate
はDAYS
を返すLocalTime
はNANOS
を返すLocalDateTime
はNANOS
を返すZonedDateTime
はNANOS
を返すOffsetTime
はNANOS
を返すOffsetDateTime
はNANOS
を返すChronoLocalDate
はDAYS
を返すChronoLocalDateTime
はNANOS
を返すChronoZonedDateTime
はNANOS
を返すEra
はERAS
を返すDayOfWeek
はDAYS
を返すMonth
はMONTHS
を返すYear
はYEARS
を返すYearMonth
はMONTHS
を返すMonthDay
はnullを返す(完全な日付または時間を表さない)ZoneOffset
はnullを返す(日付または時間を表さない)Instant
はNANOS
を返す
public static TemporalQuery<ZoneId> zone()
ZoneOffset
にフォール・バックする、ZoneId
の厳密でないクエリーです。
これは、ゾーンのTemporalAccessor
を問い合せます。最初にzoneId()
を使用してゾーンを取得しようとします。それが見つからない場合は、offset()
を取得しようとします。したがって、ZonedDateTime
はgetZone()
の結果を返しますが、OffsetDateTime
はgetOffset()
の結果を返します。
ほとんどの場合、アプリケーションでは#zoneId()
ではなくこの問合せを使用するようにしてください。
ZoneId.from(TemporalAccessor)
メソッドは、メソッド参照(ZoneId::from
)を介してTemporalQuery
として使用できます。そのメソッドはこの問合せと同等ですが、ゾーンを取得できない場合に例外をスローする点が異なります。
public static TemporalQuery<ZoneOffset> offset()
ZoneOffset
の問合せ。見つからない場合はnullを返します。
これは、オフセットの時間的オブジェクトを問い合せるために使用できるTemporalQuery
を返します。時間的オブジェクトがオフセットを提供できない場合、問合せはnullを返します。
問合せの実装は、OFFSET_SECONDS
フィールドを調べ、それを使用してZoneOffset
を作成します。
ZoneOffset.from(TemporalAccessor)
メソッドは、メソッド参照(ZoneOffset::from
)を介してTemporalQuery
として使用できます。時間的オブジェクトにオフセットが含まれている場合、この問合せとZoneOffset::from
は同じ結果を返します。時間的オブジェクトにオフセットが含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。
public static TemporalQuery<LocalDate> localDate()
LocalDate
の問合せ。
これは、ローカル日付の時間的オブジェクトを問い合せるために使用できるTemporalQuery
を返します。時間的オブジェクトがローカル日付を提供できない場合、問合せはnullを返します。
問合せの実装は、EPOCH_DAY
フィールドを調べ、それを使用してLocalDate
を作成します。
ZoneOffset.from(TemporalAccessor)
メソッドは、メソッド参照(LocalDate::from
)を介してTemporalQuery
として使用できます。時間的オブジェクトに日付が含まれている場合、この問合せとLocalDate::from
は同じ結果を返します。時間的オブジェクトに日付が含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。
public static TemporalQuery<LocalTime> localTime()
LocalTime
の問合せ。
これは、ローカル時間の時間的オブジェクトを問い合せるために使用できるTemporalQuery
を返します。時間的オブジェクトがローカル時間を提供できない場合、問合せはnullを返します。
問合せの実装は、NANO_OF_DAY
フィールドを調べ、それを使用してLocalTime
を作成します。
ZoneOffset.from(TemporalAccessor)
メソッドは、メソッド参照(LocalTime::from
)を介してTemporalQuery
として使用できます。時間的オブジェクトに時間が含まれている場合、この問合せとLocalTime::from
は同じ結果を返します。時間的オブジェクトに時間が含まれていない場合、メソッド参照は例外をスローしますが、この問合せはnullを返します。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.