- すべての実装されたインタフェース:
InstantSource
この抽象クラスのインスタンスは、現在のインスタントのプラガブル表現にアクセスするために使用されます。格納されたタイムゾーンを使用して、現在の日時を検出できます。 たとえば、System.currentTimeMillis()
およびTimeZone.getDefault()
のかわりにClock
を使用できます。
Clock
の使用は任意です。 すべての主要な日付/時間クラスには、デフォルト・タイムゾーンのシステム・クロックを使用するnow()
ファクトリ・メソッドも用意されています。 この抽象の主要目的は、代替クロックを必要なときにプラグインできるようにすることです。 アプリケーションはstaticメソッドではなくオブジェクトを使用して現在時間を取得します。 これによりテストを単純化できます。
そのため、この抽象クラスは、実際にその結果がタイムラインの現在のインスタントを示していることを保証しません。 かわりに、アプリケーションは現在のインスタント・ゾーンおよびタイムゾーンに対する制御ビューを提供できます。
アプリケーションのベスト・プラクティスは、現在の即時およびタイムゾーンを必要とするメソッドにClock
を渡すことです。 これを実現するための1つの方法が、Dependency Injectionフレームワークです。
public class MyBean { private Clock clock; // dependency inject ... public void process(LocalDate eventDate) { if (eventDate.isBefore(LocalDate.now(clock)) { ... } } }この方法では、テスト中に
fixed
やoffset
などの代替クロックを使用できます。
system
ファクトリ・メソッドは、使用可能なシステム・クロックに基づいてクロックを提供します。 これは、System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。
- 実装要件:
- この抽象クラスは、他のクラスが確実に正しく動作するように、注意して実装する必要があります。 すべての実装がスレッド・セーフである必要がある - 1つのインスタンスは、競合状態などの悪影響なく、複数のスレッドから起動できる必要があります。
主要メソッドは例外のスローを許可するように定義されています。 通常の使用では例外はスローされませんが、唯一可能な実装は、中央の時間サーバーからネットワーク経由で時間を取得します。 このケースでは明らかに、ルックアップが失敗する可能性があるため、そのメソッドは例外をスローすることが許可されます。
Clock
から返されるインスタントは、「Instant
」で説明されているように、うるう秒を無視するタイム・スケールで機能します。 うるう秒情報を提供するソースを実装がラップしている場合、うるう秒を調整するメカニズムを使用することをお薦めします。 Javaタイムスケールは、UTC-SLSの使用を義務付けます。ただし、クロック実装は、それらがどのように機能するかをドキュメント化している限り、そのタイム・スケールでの精度を選択できます。 したがって実装は、実際にUTC-SLS slewを実行する必要はなく、そうでない場合でもうるう秒を意識する必要はありません。実装は、可能な場合は常に
Serializable
を実装するようにしてください。さらに、実装が直列化をサポートするかどうかをドキュメント化する必要があります。 - 導入されたバージョン:
- 1.8
- 関連項目:
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明boolean
このクロックがもう一方のクロックと等しいかどうかを確認します。static Clock
常に同じインスタントを返すクロックを取得します。abstract ZoneId
getZone()
日付と時間を作成するために使用されるタイムゾーンを取得します。int
hashCode()
このクロックのハッシュ・コード。abstract Instant
instant()
クロックの現在の時点を取得します。long
millis()
クロックの現在の時点をミリ秒で取得します。static Clock
指定されたデュレーションを加算して指定されたクロックからインスタントを返すクロックを取得しますstatic Clock
最高の利用可能なシステム・クロックを使用して現在の瞬間を返すクロックを取得します。static Clock
利用できる最適なシステム・クロックを使用し、デフォルト・タイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。static Clock
利用できる最適なシステム・クロックを使用し、UTCタイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。static Clock
指定されたデュレーションの直近値に切り捨てられたインスタントを指定されたクロックから返すクロックを取得します。static Clock
tickMillis
(ZoneId zone) 最高の利用可能なシステム・クロックを使用して、ミリ秒単位で現在の時刻を返すクロックを取得します。static Clock
tickMinutes
(ZoneId zone) 最高の利用可能なシステム・クロックを使用して、分単位で現在の時刻を返す時計を取得します。static Clock
tickSeconds
(ZoneId zone) 最高の利用可能なシステム・クロックを使用して、秒単位で現在のチックを返すクロックを取得します。abstract Clock
別のタイムゾーンを使って、このクロックのコピーを返します。
-
コンストラクタの詳細
-
Clock
protected Clock()サブクラスでアクセスできるコンストラクタです。
-
-
メソッドの詳細
-
systemUTC
public static Clock systemUTC()利用できる最適なシステム・クロックを使用し、UTCタイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。日付または時間なしの現在の時点が必要なときは、
systemDefaultZone()
ではなくこのクロックを使用するようにしてください。このクロックは最良の利用可能なシステム・クロックに基づいています。 これは、
System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。時点から日付または時間への変換にはUTCタイムゾーンが使用されます。
返される実装は、不変、スレッドセーフおよび
Serializable
です。 これはsystem(ZoneOffset.UTC)
と同等です。- 戻り値:
- UTCゾーンで利用可能な最良のシステム・クロックを使用するクロック、nullでない
-
systemDefaultZone
public static Clock systemDefaultZone()利用できる最適なシステム・クロックを使用し、デフォルト・タイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。このクロックは最良の利用可能なシステム・クロックに基づいています。 これは、
System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。このメソッドを使用すると、デフォルト・タイムゾーンへの依存関係がアプリケーションにハードコードされます。 こうなることを避け、可能な場合は常に特定のタイムゾーンを使用することをお薦めします。 日付または時間なしの現在の時点が必要な場合は、
UTCクロック
を使用するようにしてください。返される実装は、不変、スレッドセーフおよび
Serializable
です。 これはsystem(ZoneId.systemDefault())
と同等です。- 戻り値:
- デフォルト・ゾーンで利用可能な最良のシステム・クロックを使用するクロック、nullでない
- 関連項目:
-
system
最高の利用可能なシステム・クロックを使用して現在の瞬間を返すクロックを取得します。このクロックは最良の利用可能なシステム・クロックに基づいています。 これは、
System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。時点から日付または時間への変換には指定されたタイムゾーンが使用されます。
返される実装は、不変、スレッドセーフおよび
Serializable
です。- パラメータ:
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでない- 戻り値:
- 指定されたゾーンで利用可能な最良のシステム・クロックを使用するクロック、nullでない
-
tickMillis
最高の利用可能なシステム・クロックを使用して、ミリ秒単位で現在の時刻を返すクロックを取得します。このクロックは、ミリ秒に切り捨てられたナノ秒フィールドを常に持ちます。 これによりミリ秒単位で目に見える時間が確実に刻み込まれます。 基本となるクロックは最良の利用可能なシステム・クロックで、
system(ZoneId)
を使用することと同等です。実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。 したがって、このクロックを介して観測されるミリ秒の開始は、基礎クロックを介して直接観測されるミリ秒より遅くなる可能性があります。
返される実装は、不変、スレッドセーフおよび
Serializable
です。 これはtick(system(zone), Duration.ofMillis(1))
と等価です。- パラメータ:
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでない- 戻り値:
- 指定されたゾーン(ミリ秒単位ではない)を使用してミリ秒単位でティックするクロック
- 導入されたバージョン:
- 9
-
tickSeconds
最高の利用可能なシステム・クロックを使用して、秒単位で現在のチックを返すクロックを取得します。このクロックでは常に、ナノ秒フィールドがゼロに設定されます。 これにより、表示される時間が整数秒単位でティックすることが保証されます。 基本となるクロックは最良の利用可能なシステム・クロックで、
system(ZoneId)
を使用することと同等です。実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。 その場合、このクロック経由で観察される秒の開始は、基礎となるクロック経由で直接観察される秒よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよび
Serializable
です。 これはtick(system(zone), Duration.ofSeconds(1))
と同等です。- パラメータ:
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでない- 戻り値:
- 指定されたゾーンを使用して整数秒単位でティックするクロック、nullでない
-
tickMinutes
最高の利用可能なシステム・クロックを使用して、分単位で現在の時刻を返す時計を取得します。このクロックでは常に、ナノ秒および秒フィールドがゼロに設定されます。 これにより、表示される時間が整数分単位でティックすることが保証されます。 基本となるクロックは最良の利用可能なシステム・クロックで、
system(ZoneId)
を使用することと同等です。実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。 その場合、このクロック経由で観察される分の開始は、基礎となるクロック経由で直接観察される分よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよび
Serializable
です。 これはtick(system(zone), Duration.ofMinutes(1))
と同等です。- パラメータ:
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでない- 戻り値:
- 指定されたゾーンを使用して整数分単位でティックするクロック、nullでない
-
tick
指定されたデュレーションの直近値に切り捨てられたインスタントを指定されたクロックから返すクロックを取得します。このクロックは、指定されたデュレーションでのみティックします。 つまり、デュレーションが0.5秒の場合、クロックは0.5秒に切り捨てられた時点を返します。
ティック・デュレーションは正である必要があります。 整数ミリ秒より小さい部分がある場合、整数デュレーションは1秒に割り振る(余りなし)必要があります。 通常のすべてのティック・デュレーションは、これらの条件(時、分、秒およびミリ秒の倍数、さらに知覚可能なナノ秒デュレーション(20ナノ秒、250,000ナノ秒、500,000ナノ秒など)を含みます)に一致します。
0または1ナノ秒デュレーションには切捨て効果はありません。 これらのいずれかを渡すと基礎となるクロックが返されます。
実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。 そのため、このクロック経由で観察される、要求されたデュレーションの開始は、基礎となるクロック経由で直接観察される分よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよび
Serializable
です(ベース・クロックが存在する場合)。- パラメータ:
baseClock
- ティックするクロックの基礎となるベース・クロック、nullでないtickDuration
- 表示される各ティックのデュレーション、負でない、nullでない- 戻り値:
- デュレーションの整数単位でティックするクロック、nullでない
- 例外:
IllegalArgumentException
- デュレーションが負の場合、またはデュレーションに整数ミリ秒よりも小さい部分がある(整数デュレーションを1秒に割り振れない)場合ArithmeticException
- デュレーションが大きすぎてナノとして表現できない場合
-
fixed
常に同じインスタントを返すクロックを取得します。このクロックは単純に指定された時点を返します。 つまり、従来の意味でのクロックではありません。 これの主要ユース・ケースはテスティングです。テストが現在のクロックに依存しないことを、fixedクロックが保証します。
返される実装は、不変、スレッドセーフおよび
Serializable
です。- パラメータ:
fixedInstant
- クロックとして使用するインスタント、nullでないzone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでない- 戻り値:
- 常に同じ時点を返すクロック、nullでない
-
offset
指定されたデュレーションを加算して指定されたクロックからインスタントを返すクロックを取得しますこのクロックは別のクロックをラップし、指定されたデュレーションだけ後の時点を返します。 デュレーションが負の場合、時点は現在の日付/時間より前になります。 これの主要ユース・ケースは、将来または過去での実行をシミュレートすることです。
デュレーション・ゼロは、オフセット効果なしです。 ゼロを渡すと、基礎となるクロックが返されます。
返される実装は、不変、スレッドセーフおよび
Serializable
です(ベース・クロックが存在する場合)。- パラメータ:
baseClock
- デュレーションを追加するベース・クロック、nullでないoffsetDuration
- 追加するデュレーション、nullでない- 戻り値:
- デュレーションが追加された、クロックベース・クロックに基づくクロック、nullでない
-
getZone
public abstract ZoneId getZone()日付と時間を作成するために使用されるタイムゾーンを取得します。クロックは通常、現在の時点を取得してから、タイムゾーンを使用してそれを日付または時間に変換します。 このメソッドは使用されるタイムゾーンを返します。
- 戻り値:
- 時点を解釈するために使用されるタイムゾーン、nullでない
-
withZone
別のタイムゾーンを使って、このクロックのコピーを返します。クロックは通常、現在の時点を取得してから、タイムゾーンを使用してそれを日付または時間に変換します。 このメソッドは、プロパティが似ていて異なるタイムゾーンを使用するクロックを返します。
- 定義:
- インタフェース
InstantSource
内のwithZone
- パラメータ:
zone
- 変更先のタイムゾーン、null以外- 戻り値:
- 指定されたタイムゾーンの、このクロックに基づくクロック、nullでない
-
millis
public long millis()クロックの現在の時点をミリ秒で取得します。これは、1970-01-01T00:00Z (UTC)から測定された、ミリ秒ベースの時点を返します。 これは、
System.currentTimeMillis()
の定義と同等です。ほとんどのアプリケーションは、生のミリ秒値ではなく時系列のインスタントを表す場合は、このメソッドを使用せず
Instant
を使用することをお薦めします。 このメソッドは、オブジェクトの作成が受け入れられない負荷の高いユース・ケースで、クロックを使用できるように提供されています。デフォルト実装は現在、
instant()
を呼び出します。- 定義:
- インタフェース
InstantSource
内のmillis
- 戻り値:
- 1970-01-01T00:00Z (UTC)のJava epochから測定された、このクロックからの現在のミリ秒時点、nullでない
- 例外:
DateTimeException
- 時点を取得できない場合、ほとんどの実装ではスローされない
-
instant
public abstract Instant instant()クロックの現在の時点を取得します。これは、クロックによって定義された現在の時点を表す時点を返します。
- 定義:
- インタフェース
InstantSource
内のinstant
- 戻り値:
- このクロックからの現在の時点、nullでない
- 例外:
DateTimeException
- 時点を取得できない場合、ほとんどの実装ではスローされない
-
equals
public boolean equals(Object obj) このクロックがもう一方のクロックと等しいかどうかを確認します。クロックは、その状態に基づいてequalsを比較し、
Object.equals(java.lang.Object)
の規定を満たすように、このメソッドをオーバーライドするはずです。 オーバーライドされない場合、動作はObject.equals(java.lang.Object)
によって定義されます。 -
hashCode
public int hashCode()このクロックのハッシュ・コード。クロックは、その状態に基づいて、
Object.hashCode()
の規定を満たすように、このメソッドをオーバーライドするはずです。 オーバーライドされない場合、動作はObject.hashCode()
によって定義されます。
-