public interface TemporalUnit
時間の測定は単位(年、月、日、時、分、秒など)に基づいて行われます。このインタフェースの実装は、これらの単位を表します。
このインタフェースのインスタンスは、単位の量ではなく、単位自体を表します。一般的な単位によって量を表すクラスについては、Period
を参照してください。
もっとも一般的に使用される単位は、ChronoUnit
で定義されます。その他の単位は、IsoFields
で提供されます。アプリケーション・コードでこのインタフェースを実装することにより、単位を記述することもできます。
単位は、二重のディスパッチを使用して機能します。クライアント・コードは、単位がChronoUnit
かどうかを確認するLocalDateTime
のような日付/時間上のメソッドを呼び出します。そうである場合、日付/時間はそれを処理する必要があります。それ以外の場合、このメソッド呼出しはこのインタフェース内の一致するメソッドに再度ディスパッチされます。
修飾子と型 | メソッドと説明 |
---|---|
<R extends Temporal> |
addTo(R temporal, long amount)
指定された期間を加算して、指定された時間的オブジェクトのコピーを返します。
|
long |
between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
2つの時間的オブジェクトの間の時間量を計算します。
|
Duration |
getDuration()
この単位のデュレーション(推定時間の場合もある)を取得します。
|
boolean |
isDateBased()
この単位が日付のコンポーネントを表すかどうかを確認します。
|
boolean |
isDurationEstimated()
単位のデュレーションが推定値かどうかをチェックします。
|
default boolean |
isSupportedBy(Temporal temporal)
指定された時間的オブジェクトでこの単位がサポートされているかどうかを確認します。
|
boolean |
isTimeBased()
この単位が時間のコンポーネントを表すかどうかを確認します。
|
String |
toString()
単位のわかりやすい名前を取得します。
|
Duration getDuration()
すべての単位は、このメソッドから標準のナノ秒で測定されたデュレーションを返します。デュレーションは、ゼロ以外の正の数です。たとえば、1時間は60 * 60 * 1,000,000,000ns
のデュレーションを持っています。
一部の単位は正確なデュレーションを返しますが、その他は推定値を返します。たとえば、サマー・タイムの変更の可能性があるため、日は推定のデュレーションを持っています。デュレーションが推定値かどうかを判定するには、isDurationEstimated()
を使用します。
boolean isDurationEstimated()
すべての単位はデュレーションを持っていますが、デュレーションは必ずしも正確ではありません。たとえば、サマー・タイムの変更の可能性があるため、日は推定のデュレーションを持っています。このメソッドは、デュレーションが推定値である場合にtrueを返し、正確な値である場合にfalseを返します。正確か推定かの判定では、うるう秒は無視されます。
boolean isDateBased()
日付が日付の意味を示すために使用される場合、その日付は時間ベースです。標準の1日の長さの整数倍であるデュレーションを持っている必要があります。たとえば36時間のような単位を表す場合、isDateBased()
とisTimeBased()
の両方がfalseを返すのは有効です。
boolean isTimeBased()
単位が時間の意味を示すために使用される場合、その単位は時間ベースです。標準の1日の長さで割り切れるデュレーションを持っている必要があります。たとえば36時間のような単位を表す場合、isDateBased()
とisTimeBased()
の両方がfalseを返すのは有効です。
default boolean isSupportedBy(Temporal temporal)
これは、実装側の日付/時間がこの単位を加算/減算できることを確認します。これを使用すると、例外のスローを回避できます。
このデフォルトの実装は、Temporal.plus(long, TemporalUnit)
を使用して値を求めます。
temporal
- チェックする時間的オブジェクト。null以外<R extends Temporal> R addTo(R temporal, long amount)
加算される期間はこの単位の倍数です。たとえば、このメソッドを使用して、ある日付に「3日」を加算することができます。それには、「日」を表すインスタンスに対してこのメソッドを呼び出し、日付と期間「3」を渡します。加算する期間は負でもよく、それは減算と等価です。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporal.plus(long, TemporalUnit)
を使用することです。
// these two lines are equivalent, but the second approach is recommended temporal = thisUnit.addTo(temporal); temporal = temporal.plus(thisUnit);2つ目の方法
plus(TemporalUnit)
の方がコードを読むときにわかりやすいため、これを使用することをお薦めします。
実装では、問合せや計算を実行する場合、ChronoUnit
で使用可能な単位、またはChronoField
で使用可能なフィールドを使用するようにしてください。単位がサポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。
実装では、指定された時間的オブジェクトを変更してはいけません。かわりに、元のオブジェクトの調整済のコピーを返す必要があります。これは、不変および可変の実装に安全で等価な動作を提供します。
R
- Temporalオブジェクトの型temporal
- 調整する時間的オブジェクト。null以外amount
- 加算するこの単位の量。正または負DateTimeException
- 期間を加算できない場合UnsupportedTemporalTypeException
- 単位が時間的オブジェクトによってサポートされない場合long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
これは、この単位で量を計算します。開始点と終了点は時間的オブジェクトで指定され、互換性のある型でなければなりません。実装では、2番目の型を最初の型のインスタンスに変換してから、量を計算します。終了が開始より前である場合、結果は負になります。たとえば、2つの時間的オブジェクト間の時間数での量は、HOURS.between(startTime, endTime)
を使用して計算できます。
計算では、2つの時間的オブジェクト間の完全な単位の数を表す整数を返します。たとえば、時間11:30と13:29の間の量は、2時間には1分足りないため、時間数では1時間だけになります。
このメソッドを使用する等価な方法が2つあります。1つ目はこのメソッドを直接呼び出すことです。2つ目はTemporal.until(Temporal, TemporalUnit)
を使用することです。
// these two lines are equivalent between = thisUnit.between(start, end); between = start.until(end, thisUnit);この選択は、コードが読みやすくなるのはどちらかに基づいて行ってください。
たとえば、このメソッドを使用すると、2つの日付間の日数を計算できます。
long daysBetween = DAYS.between(start, end); // or alternatively long daysBetween = start.until(end, DAYS);
実装では、問合せや計算を実行する場合、ChronoUnit
で使用可能な単位、またはChronoField
で使用可能なフィールドを使用するようにしてください。単位がサポートされていない場合は、UnsupportedTemporalTypeException
をスローする必要があります。実装では、指定された時間的オブジェクトを変更してはいけません。
getClass()
を使用して2つの時間的オブジェクトが同じ型を持っているかどうかを確認することから始める必要があります。持っていない場合は、temporal1Inclusive.until(temporal2Exclusive, this)
を呼び出して結果を取得する必要があります。temporal1Inclusive
- ベースの時間的オブジェクト。null以外temporal2Exclusive
- 他方の時間的オブジェクト(これを含まない)。null以外DateTimeException
- 量を計算できない場合、または終了の時間的オブジェクトを開始の時間的オブジェクトと同じ型に変換できない場合UnsupportedTemporalTypeException
- 単位が時間的オブジェクトによってサポートされない場合ArithmeticException
- 数値のオーバーフローが発生した場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.