public interface TemporalAccessor
これは、日付、時間およびオフセット・オブジェクトのベース・インタフェース型です。これは、情報をフィールドまたは問合せとして提供できるクラスによって実装されます。
ほとんどの日時情報は、数値として表されます。これらは、大きな値を処理するためにlong
で数値を保持するTemporalField
を使用してモデル化されています。年、月および「月の日」はフィールドの簡単な例ですが、これらにはインスタントとオフセットも含まれています。フィールドの標準セットについては、ChronoField
を参照してください。
日付/時間情報の2つの部分(chronologyおよびtime-zone)を数値で表すことはできません。これらには、TemporalQuery
で定義されるstaticメソッドを使用する問合せを介してアクセスします。
サブインタフェースTemporal
は、この定義を、より完全な時間的オブジェクトに対する調整と操作もサポートするインタフェースに拡張します。
このインタフェースはフレームワークレベルのインタフェースであり、アプリケーション・コードで広範囲にわたって使用しないようにしてください。かわりに、LocalDate
などの具象型のインスタンスを作成して使い回してください。これには様々な理由がありますが、その1つはこのインタフェースの実装がISO以外の暦体系になっている可能性があることです。この問題の詳細は、ChronoLocalDate
を参照してください。
修飾子と型 | メソッドと説明 |
---|---|
default int |
get(TemporalField field)
指定されたフィールドの値を
int として取得します。 |
long |
getLong(TemporalField field)
指定されたフィールドの値を
long として取得します。 |
boolean |
isSupported(TemporalField field)
指定されたフィールドがサポートされているかどうかをチェックします。
|
default <R> R |
query(TemporalQuery<R> query)
この日付/時間を問い合せます。
|
default ValueRange |
range(TemporalField field)
指定されたフィールドの有効な値の範囲を取得します。
|
boolean isSupported(TemporalField field)
これは、指定されたフィールドに対して日付/時間を問合せできるかどうかをチェックします。falseの場合、range
メソッドとget
メソッドを呼び出すと例外がスローされます。
ChronoField
で定義されたすべてのフィールドを確認して処理する必要があります。フィールドがサポートされている場合はtrueを返し、それ以外の場合はfalseを返す必要があります。
フィールドがChronoField
でない場合、このメソッドの結果は、this
を引数として渡してTemporalField.isSupportedBy(TemporalAccessor)
を呼び出すことによって取得します。
実装は、この読取り専用メソッドが呼び出されたときに識別可能な状態が変更されていないことを確認する必要があります。
field
- チェックするフィールド、nullはfalseを返すdefault ValueRange range(TemporalField field)
すべてのフィールドはlong
整数で表現できます。このメソッドは、その値の有効範囲を記述するオブジェクトを返します。この時間的オブジェクトの値は、返される範囲の精度を向上するために使われます。フィールドがサポートされていないか、他の何らかの理由で、日付/時間で範囲を返すことができない場合、例外がスローされます。
結果は有効な最小値と最大値を記述しているだけなので、それらを深く解釈しすぎないことが重要です。たとえば、範囲内の値であっても、フィールドに対して無効な場合があります。
ChronoField
で定義されたすべてのフィールドを確認して処理する必要があります。フィールドがサポートされている場合は、フィールドの範囲を返す必要があります。サポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
フィールドがChronoField
でない場合、このメソッドの結果は、this
を引数として渡してTemporalField.rangeRefinedBy(TemporalAccessorl)
を呼び出すことによって取得されます。
実装は、この読取り専用メソッドが呼び出されたときに識別可能な状態が変更されていないことを確認する必要があります。
デフォルト実装は、このコードと同等に動作する必要があります。
if (field instanceof ChronoField) { if (isSupported(field)) { return field.range(); } throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } return field.rangeRefinedBy(this);
field
- 範囲を問い合わせるフィールド、null以外DateTimeException
- フィールドの範囲を取得できない場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合default int get(TemporalField field)
int
として取得します。
これは、指定されたフィールドの値の日付/時間を問い合わせます。返される値は常にフィールドの値の有効な範囲内になります。フィールドがサポートされていないか、他の何らかの理由で、日付/時間で値を返すことができない場合、例外がスローされます。
ChronoField
で定義されたすべてのフィールドを確認して処理する必要があります。フィールドがサポートされており、int
の範囲を持っている場合は、フィールドの値を返す必要があります。サポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
フィールドがChronoField
ではない場合、このメソッドの結果は、引数としてthis
を渡してTemporalField.getFrom(TemporalAccessor)
を呼び出すことにより取得されます。
実装は、この読取り専用メソッドが呼び出されたときに識別可能な状態が変更されていないことを確認する必要があります。
デフォルト実装は、このコードと同等に動作する必要があります。
if (range(field).isIntValue()) { return range(field).checkValidIntValue(getLong(field), field); } throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead");
field
- 取得するフィールド、null以外DateTimeException
- フィールドの値を取得できない場合、または値がフィールドの有効な値の範囲外の場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合、または値の範囲がint
を超えている場合ArithmeticException
- 数値のオーバーフローが発生した場合long getLong(TemporalField field)
long
として取得します。
これは、指定されたフィールドの値の日付/時間を問い合わせます。返される値はフィールドに有効な値の範囲外になることがあります。フィールドがサポートされていないか、他の何らかの理由で、日付/時間で値を返すことができない場合、例外がスローされます。
ChronoField
で定義されたすべてのフィールドを確認して処理する必要があります。フィールドがサポートされている場合は、フィールドの値を返す必要があります。サポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
フィールドがChronoField
ではない場合、このメソッドの結果は、引数としてthis
を渡してTemporalField.getFrom(TemporalAccessor)
を呼び出すことにより取得されます。
実装は、この読取り専用メソッドが呼び出されたときに識別可能な状態が変更されていないことを確認する必要があります。
field
- 取得するフィールド、null以外DateTimeException
- フィールドの値を取得できない場合UnsupportedTemporalTypeException
- フィールドがサポートされていない場合ArithmeticException
- 数値のオーバーフローが発生した場合default <R> R query(TemporalQuery<R> query)
これは指定された問合せ方法オブジェクトを使用してこの日付/時間を問い合わせます。
問合せは、日付/時間から情報を抽出するための主要なツールです。それらは、戦略デザイン・パターンのように、問合せのプロセスを外部化して異なるアプローチを可能にするために存在します。例として、日付がうるう年の2月29日の前日かどうかを確認する問合せや、次の誕生日までの日数を計算する問合せなどがあります。
もっとも一般的な問合せの実装は、LocalDate::from
やZoneId::from
などのメソッド参照です。その他の実装は、TemporalQuery
上のstaticメソッドとして提供されます。
if (query == TemporalQueries.zoneId() || query == TemporalQueries.chronology() || query == TemporalQueries.precision()) { return null; } return query.queryFrom(this);将来のバージョンでは、if文にさらに詳しい問合せを追加できます。
このインタフェースを実装し、このメソッドをオーバーライドするすべてのクラスは、TemporalAccessor.super.query(query)
を呼び出す必要があります。JDKクラスがデフォルト動作と同等の動作を提供する場合、JDKクラスはsuperの呼び出しを回避できますが、JDK以外のクラスはこの最適化を利用できないため、super
を呼び出す必要があります。
実装は、デフォルト実装のif文に列挙されたいずれかの問合せの値を提供できる場合、それを提供する必要があります。たとえば、時と分を格納するアプリケーション定義のHourMin
クラスは、このメソッドを次のようにオーバーライドする必要があります。
if (query == TemporalQueries.precision()) { return MINUTES; } return TemporalAccessor.super.query(query);
実装は、この読取り専用メソッドが呼び出されたときに識別可能な状態が変更されていないことを確認する必要があります。
R
- 結果の型query
- 呼び出す問合せ、null以外DateTimeException
- 問合せできない場合ArithmeticException
- 数値のオーバーフローが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.