public interface TemporalField
日付と時間は、時系列を人間にとって意味のある要素に分割するフィールドを使用して表現されます。このインタフェースの実装は、これらのフィールドを表します。
もっとも一般的に使用される単位は、ChronoField
で定義されます。その他のフィールドは、IsoFields
、WeekFields
およびJulianFields
で提供されます。アプリケーション・コードでこのインタフェースを実装することにより、フィールドを記述することもできます。
フィールドは、二重のディスパッチを使用して機能します。クライアント・コードは、フィールドがChronoField
かどうかを確認するLocalDateTime
のような日付/時間上のメソッドを呼び出します。そうである場合、日付/時間はそれを処理する必要があります。それ以外の場合、このメソッド呼出しはこのインタフェース内の一致するメソッドに再度ディスパッチされます。
Serializable
(直列化可能)にしてください。列挙も、有効な実装方法です。修飾子と型 | メソッドと説明 |
---|---|
<R extends Temporal> |
adjustInto(R temporal, long newValue)
このフィールドの値が設定された、指定された時間的オブジェクトのコピーを返します。
|
TemporalUnit |
getBaseUnit()
フィールドの測定単位を取得します。
|
default String |
getDisplayName(Locale locale)
要求されたロケールでのフィールドの表示名を取得します。
|
long |
getFrom(TemporalAccessor temporal)
指定された時間的オブジェクトからこのフィールドの値を取得します。
|
TemporalUnit |
getRangeUnit()
フィールドの範囲を取得します。
|
boolean |
isDateBased()
このフィールドが日付のコンポーネントを表しているかどうかを確認します。
|
boolean |
isSupportedBy(TemporalAccessor temporal)
このフィールドが時間的オブジェクトでサポートされているかどうかを確認します。
|
boolean |
isTimeBased()
このフィールドが時間のコンポーネントを表しているかどうかを確認します。
|
ValueRange |
range()
フィールドの有効値の範囲を取得します。
|
ValueRange |
rangeRefinedBy(TemporalAccessor temporal)
時間的オブジェクトを使用して結果を絞り込むことにより、このフィールドの有効値の範囲を取得します。
|
default TemporalAccessor |
resolve(Map<TemporalField,Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
このフィールドを解決して、より簡単な代替または日付を提供します。
|
String |
toString()
そのフィールドのわかりやすい名前を取得します。
|
default String getDisplayName(Locale locale)
ロケール用の表示名がない場合は、適切なデフォルトを返す必要があります。
デフォルトの実装では、ロケールがnullでないことを確認し、toString()
を返す必要があります。
locale
- 使用するロケール。null以外TemporalUnit getBaseUnit()
フィールドの単位は、範囲内で変化する期間です。たとえば、フィールド「MonthOfYear」の単位は「Months」です。getRangeUnit()
も参照してください。
TemporalUnit getRangeUnit()
フィールドの範囲は、フィールドがその範囲内で変化する期間です。たとえば、フィールド「MonthOfYear」の範囲は「Years」です。getBaseUnit()
も参照してください。
範囲がnullになることはありません。たとえば、「Year」フィールドは「YearOfForever」の短縮形です。したがって、その単位は「Years」で、範囲は「Forever」です。
ValueRange range()
すべてのフィールドはlong
整数で表現できます。このメソッドは、その値の有効範囲を記述するオブジェクトを返します。このメソッドは、一般にISO-8601暦体系のみに適用されます。
結果は有効な最小値と最大値を記述しているだけなので、それらを深く解釈しすぎないことが重要です。たとえば、範囲内の値であっても、フィールドに対して無効な場合があります。
boolean isDateBased()
EPOCH_DAY
から導出できるフィールドは、日付ベースです。たとえば「1週間のうちの分」のようなフィールドを表す場合、isDateBased()
とisTimeBased()
の両方がfalseを返すのは有効です。
boolean isTimeBased()
NANO_OF_DAY
から導出できるフィールドは、時間ベースです。たとえば「1週間のうちの分」のようなフィールドを表す場合、isDateBased()
とisTimeBased()
の両方がfalseを返すのは有効です。
boolean isSupportedBy(TemporalAccessor temporal)
これは、時間的オブジェクトのアクセサがこのフィールドをサポートしているかどうかを判定します。これがfalseを返す場合、このフィールドについて時間的オブジェクトに問い合せることはできません。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporalAccessor.isSupported(TemporalField)
を使用することです。
// these two lines are equivalent, but the second approach is recommended temporal = thisField.isSupportedBy(temporal); temporal = temporal.isSupported(thisField);2つ目の方法
isSupported(TemporalField)
の方がコードを読むときにわかりやすいため、これを使用することをお薦めします。
実装では、サポートされているかどうかを判定するために、ChronoField
で使用可能なフィールドを使用するようにしてください。
temporal
- 問い合せる時間的オブジェクト。null以外ValueRange rangeRefinedBy(TemporalAccessor temporal)
これは時間的オブジェクトを使用してフィールドの有効値の範囲を見つけます。これは、range()
に似ていますが、このメソッドは時間的オブジェクトを使用して結果を調整します。たとえば、フィールドがDAY_OF_MONTH
の場合、月の長さには28、29、30および31日の4つの可能性があるため、range
メソッドは正確ではありません。このメソッドを日付に使用すると、範囲は正確になり、これら4つのオプションのうち1つだけが返されます。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporalAccessor.range(TemporalField)
を使用することです。
// these two lines are equivalent, but the second approach is recommended temporal = thisField.rangeRefinedBy(temporal); temporal = temporal.range(thisField);2つ目の方法
range(TemporalField)
の方がコードを読むときにわかりやすいため、これを使用することをお薦めします。
実装では、問合せや計算を実行する場合、ChronoField
で使用可能なフィールドを使用するようにしてください。フィールドがサポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
temporal
- 結果を絞り込むために使用される時間的オブジェクト。null以外DateTimeException
- フィールドの範囲を取得できない場合UnsupportedTemporalTypeException
- フィールドが時間的オブジェクトによってサポートされない場合long getFrom(TemporalAccessor temporal)
これは、このフィールドの値について時間的オブジェクトに問い合せます。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporalAccessor.getLong(TemporalField)
(またはTemporalAccessor.get(TemporalField)
)を使用することです。
// these two lines are equivalent, but the second approach is recommended temporal = thisField.getFrom(temporal); temporal = temporal.getLong(thisField);2つ目の方法
getLong(TemporalField)
の方がコードを読むときにわかりやすいため、これを使用することをお薦めします。
実装では、問合せや計算を実行する場合、ChronoField
で使用可能なフィールドを使用するようにしてください。フィールドがサポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
temporal
- 問い合せる時間的オブジェクト。null以外DateTimeException
- フィールドの値を取得できない場合UnsupportedTemporalTypeException
- フィールドが時間的オブジェクトによってサポートされない場合ArithmeticException
- 数値のオーバーフローが発生した場合<R extends Temporal> R adjustInto(R temporal, long newValue)
これは、指定された時間的オブジェクトに基づく、このフィールドの値が変更された新しい時間的オブジェクトを返します。たとえば、LocalDate
で、これは年、月、または「月の日」を設定するために使用できます。返されるオブジェクトは、指定されたオブジェクトと同じ識別可能な型を持ちます。
フィールドの変更が完全には定義されていない場合もあります。たとえば、ターゲット・オブジェクトが1月31日を表す日付である場合、月を2月に変更することは不明な場合があります。このようなケースでは、実装が結果の解決を担当します。通常は1つ前の有効な日付が選択され、この例の場合は2月の最後の有効な日になります。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporal.with(TemporalField, long)
を使用することです。
// these two lines are equivalent, but the second approach is recommended temporal = thisField.adjustInto(temporal); temporal = temporal.with(thisField);2つ目の方法
with(TemporalField)
の方がコードを読むときにわかりやすいため、これを使用することをお薦めします。
実装では、問合せや計算を実行する場合、ChronoField
で使用可能なフィールドを使用するようにしてください。フィールドがサポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
実装では、指定された時間的オブジェクトを変更してはいけません。かわりに、元のオブジェクトの調整済のコピーを返す必要があります。これは、不変および可変の実装に安全で等価な動作を提供します。
R
- Temporalオブジェクトの型temporal
- 調整する時間的オブジェクト。null以外newValue
- フィールドの新しい値DateTimeException
- フィールドを設定できない場合UnsupportedTemporalTypeException
- フィールドが時間的オブジェクトによってサポートされない場合ArithmeticException
- 数値のオーバーフローが発生した場合default TemporalAccessor resolve(Map<TemporalField,Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
このメソッドは、解析の解決フェーズで呼び出されます。これは、アプリケーションで定義されたフィールドをより標準的なフィールド(ChronoField
上のフィールドなど)や日付に単純化できるように設計されています。
アプリケーションは、通常、このメソッドを直接呼び出さないでください。
指定されたマップには、解析の現在の状態が含まれています。マップは可変であり、このフィールドおよび関連するフィールドを解決するために変更する必要があります。マップにこのフィールドが含まれる場合、このメソッドは解析中にのみ呼び出されます。したがって、実装はこのフィールドが存在することを前提としてください。
フィールドの解決は、このフィールド(および場合によっては他のフィールド)の値を確認し、より単純な値(ChronoField
など)でマップを更新するか、または完全なChronoLocalDate
を返すことで行われます。解決に成功した場合、コードは解決されたすべてのフィールド(このフィールドを含む)をマップから削除する必要があります。
たとえば、IsoFields
クラスには四半期フィールドと「四半期の日」フィールドが含まれています。そのクラスに含まれるこのメソッドの実装は、2つのフィールドとYEAR
を完全なLocalDate
に解決します。解決メソッドは、LocalDate
を返す前に3つのフィールドをマップからすべて削除します。
暦とゾーンの問合せを可能にするため、部分的に完全な時間的オブジェクトが使用されます。一般には、暦のみが必要になります。ゾーンと暦以外の項目の問合せは定義されていないため、それに依存してはいけません。他のメソッド(get
、getLong
、range
、isSupported
など)の動作は予測不可能であり、結果は定義されていません。
解決が可能なはずだが、データが無効である場合は、リゾルバ・スタイルを使用して適切な非厳密レベルを決定するようにしてください。その場合、DateTimeException
またはArithmeticException
のスローが必要になることがあります。解決が可能でない場合、解決メソッドはnullを返す必要があります。
時間フィールドを解決すると、マップが変更され、nullが返されます。日付フィールドを解決すると、通常はメソッドから日付が返され、解決されたフィールドを削除するためにマップが変更されます。ただし、日付フィールドを、日付を生成できる他のChronoField
インスタンス(EPOCH_DAY
など)に解決することも許容されます。
必ずしもすべてのTemporalAccessor
実装が戻り値として受け入れられるわけではありません。このメソッドを呼び出す実装は、ChronoLocalDate
、ChronoLocalDateTime
、ChronoZonedDateTime
およびLocalTime
を受け入れる必要があります。
デフォルト実装はnullを返す必要があります。
fieldValues
- フィールドと値のマップ、更新可能、null以外partialTemporal
- ゾーンと暦を問い合せるための部分的に完全な時間的オブジェクト。他の項目の問合せは未定義であり、推奨されない。null以外resolverStyle
- 要求された解決のタイプ、null以外ArithmeticException
- 数値のオーバーフローが発生した場合DateTimeException
- 解決時にエラーが発生した場合。temporal上のフィールドがサポートされているかどうかを最初に確認せずに、そのフィールドを問い合せた場合は、これをスローしてはいけません。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.