public abstract class Clock extends Object
このクラスのインスタンスは、現在の時点を検索するために使用されます。現在の時点は、保存済みタイムゾーンを使用して現在の日時を検索することで解釈できます。そのためクロックは、System.currentTimeMillis()
およびTimeZone.getDefault()
のかわりに使用できます。
Clock
の使用は任意です。すべての主要な日付/時間クラスには、デフォルト・タイムゾーンのシステム・クロックを使用するnow()
ファクトリ・メソッドも用意されています。この抽象の主要目的は、代替クロックを必要なときにプラグインできるようにすることです。アプリケーションはstaticメソッドではなくオブジェクトを使用して現在時間を取得します。これによりテストを単純化できます。
アプリケーションにとってのベスト・プラクティスは、Clock
を現在の時点を必要とするメソッドに渡すことです。これを実現するための1つの方法が、DI(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()
またはより分解能の高いクロック(利用できる場合)を使用します。
主要メソッドは例外のスローを許可するように定義されています。通常の使用では例外はスローされませんが、唯一可能な実装は、中央の時間サーバーからネットワーク経由で時間を取得します。このケースでは明らかに、ルックアップが失敗する可能性があるため、そのメソッドは例外をスローすることが許可されます。
Clock
から返されるインスタントは、「Instant
」で説明されているように、うるう秒を無視するタイム・スケールで機能します。うるう秒情報を提供するソースを実装がラップしている場合、うるう秒を調整するメカニズムを使用することをお薦めします。Javaタイムスケールは、UTC-SLSの使用を義務付けます。ただし、クロック実装は、それらがどのように機能するかをドキュメント化している限り、そのタイム・スケールでの精度を選択できます。したがって実装は、実際にUTC-SLS slewを実行する必要はなく、そうでない場合でもうるう秒を意識する必要はありません。
実装は、可能な場合は常にSerializable
を実装するようにしてください。さらに、実装が直列化をサポートするかどうかをドキュメント化する必要があります。
System.currentTimeMillis()
に基づいています。このメソッドは、クロックの精度に関する保証をほとんどまたはまったく提供しません。より正確なクロックを必要とするアプリケーションは、NTPサーバーなどの別の外部クロックを使用して、この抽象クラスを自身で実装する必要があります。修飾子 | コンストラクタと説明 |
---|---|
protected |
Clock()
サブクラスでアクセスできるコンストラクタです。
|
修飾子と型 | メソッドと説明 |
---|---|
boolean |
equals(Object obj)
このクロックがもう一方のクロックと等しいかどうかを確認します。
|
static Clock |
fixed(Instant fixedInstant, ZoneId zone)
常に同じインスタントを返すクロックを取得します。
|
abstract ZoneId |
getZone()
日付と時間を作成するために使用されるタイムゾーンを取得します。
|
int |
hashCode()
このクロックのハッシュ・コード。
|
abstract Instant |
instant()
クロックの現在の時点を取得します。
|
long |
millis()
クロックの現在の時点をミリ秒で取得します。
|
static Clock |
offset(Clock baseClock, Duration offsetDuration)
指定されたデュレーションを加算して指定されたクロックからインスタントを返すクロックを取得します
|
static Clock |
system(ZoneId zone)
利用できる最適なシステム・クロックを使用して現在のインスタントを返すクロックを取得します。
|
static Clock |
systemDefaultZone()
利用できる最適なシステム・クロックを使用し、デフォルト・タイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。
|
static Clock |
systemUTC()
利用できる最適なシステム・クロックを使用し、UTCタイムゾーンを使って日付と時間に変換した現在のインスタントを返すクロックを取得します。
|
static Clock |
tick(Clock baseClock, Duration tickDuration)
指定されたデュレーションの直近値に切り捨てられたインスタントを指定されたクロックから返すクロックを取得します。
|
static Clock |
tickMinutes(ZoneId zone)
利用できる最適なシステム・クロックを使用して、分刻みの現在のインスタントを返すクロックを取得します。
|
static Clock |
tickSeconds(ZoneId zone)
利用できる最適なシステム・クロックを使用して、秒刻みの現在のインスタントを返すクロックを取得します。
|
abstract Clock |
withZone(ZoneId zone)
別のタイムゾーンを使って、このクロックのコピーを返します。
|
public static Clock systemUTC()
日付または時間なしの現在の時点が必要なときは、systemDefaultZone()
ではなくこのクロックを使用するようにしてください。
このクロックは最良の利用可能なシステム・クロックに基づいています。これは、System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。
時点から日付または時間への変換にはUTCタイムゾーンが使用されます。
返される実装は、不変、スレッドセーフおよびSerializable
です。これはsystem(ZoneOffset.UTC)
と同等です。
public static Clock systemDefaultZone()
このクロックは最良の利用可能なシステム・クロックに基づいています。これは、System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。
このメソッドを使用すると、デフォルト・タイムゾーンへの依存関係がアプリケーションにハードコードされます。こうなることを避け、可能な場合は常に特定のタイムゾーンを使用することをお薦めします。日付または時間なしの現在の時点が必要な場合は、UTCクロック
を使用するようにしてください。
返される実装は、不変、スレッドセーフおよびSerializable
です。これはsystem(ZoneId.systemDefault())
と同等です。
ZoneId.systemDefault()
public static Clock system(ZoneId zone)
このクロックは最良の利用可能なシステム・クロックに基づいています。これは、System.currentTimeMillis()
、またはより分解能の高いクロック(利用できる場合)を使用します。
時点から日付または時間への変換には指定されたタイムゾーンが使用されます。
返される実装は、不変、スレッドセーフおよびSerializable
です。
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでないpublic static Clock tickSeconds(ZoneId zone)
このクロックでは常に、ナノ秒フィールドがゼロに設定されます。これにより、表示される時間が整数秒単位でティックすることが保証されます。基本となるクロックは最良の利用可能なシステム・クロックで、system(ZoneId)
を使用することと同等です。
実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。その場合、このクロック経由で観察される秒の開始は、基礎となるクロック経由で直接観察される秒よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよびSerializable
です。これはtick(system(zone), Duration.ofSeconds(1))
と同等です。
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでないpublic static Clock tickMinutes(ZoneId zone)
このクロックでは常に、ナノ秒および秒フィールドがゼロに設定されます。これにより、表示される時間が整数分単位でティックすることが保証されます。基本となるクロックは最良の利用可能なシステム・クロックで、system(ZoneId)
を使用することと同等です。
実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。その場合、このクロック経由で観察される分の開始は、基礎となるクロック経由で直接観察される分よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよびSerializable
です。これはtick(system(zone), Duration.ofMinutes(1))
と同等です。
zone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでないpublic static Clock tick(Clock baseClock, Duration tickDuration)
このクロックは、指定されたデュレーションでのみティックします。つまり、デュレーションが0.5秒の場合、クロックは0.5秒に切り捨てられた時点を返します。
ティック・デュレーションは正である必要があります。整数ミリ秒より小さい部分がある場合、整数デュレーションは1秒に割り振る(余りなし)必要があります。通常のすべてのティック・デュレーションは、これらの条件(時、分、秒およびミリ秒の倍数、さらに知覚可能なナノ秒デュレーション(20ナノ秒、250,000ナノ秒、500,000ナノ秒など)を含みます)に一致します。
0または1ナノ秒デュレーションには切捨て効果はありません。これらのいずれかを渡すと基礎となるクロックが返されます。
実装は、パフォーマンス上の理由からキャッシュ戦略を使用できます。そのため、このクロック経由で観察される、要求されたデュレーションの開始は、基礎となるクロック経由で直接観察される分よりも遅れる可能性があります。
返される実装は、不変、スレッドセーフおよびSerializable
です(ベース・クロックが存在する場合)。
baseClock
- ティックするクロックの基礎となるベース・クロック、nullでないtickDuration
- 表示される各ティックのデュレーション、負でない、nullでないIllegalArgumentException
- デュレーションが負の場合、またはデュレーションに整数ミリ秒よりも小さい部分がある(整数デュレーションを1秒に割り振れない)場合ArithmeticException
- デュレーションが大きすぎてナノとして表現できない場合public static Clock fixed(Instant fixedInstant, ZoneId zone)
このクロックは単純に指定された時点を返します。つまり、従来の意味でのクロックではありません。これの主要ユース・ケースはテスティングです。テストが現在のクロックに依存しないことを、fixedクロックが保証します。
返される実装は、不変、スレッドセーフおよびSerializable
です。
fixedInstant
- クロックとして使用するインスタント、nullでないzone
- 時点を日付/時間に変換するために使用するタイムゾーン、nullでないpublic static Clock offset(Clock baseClock, Duration offsetDuration)
このクロックは別のクロックをラップし、指定されたデュレーションだけ後の時点を返します。デュレーションが負の場合、時点は現在の日付/時間より前になります。これの主要ユース・ケースは、将来または過去での実行をシミュレートすることです。
デュレーション・ゼロは、オフセット効果なしです。ゼロを渡すと、基礎となるクロックが返されます。
返される実装は、不変、スレッドセーフおよびSerializable
です(ベース・クロックが存在する場合)。
baseClock
- デュレーションを追加するベース・クロック、nullでないoffsetDuration
- 追加するデュレーション、nullでないpublic abstract ZoneId getZone()
クロックは通常、現在の時点を取得してから、タイムゾーンを使用してそれを日付または時間に変換します。このメソッドは使用されるタイムゾーンを返します。
public abstract Clock withZone(ZoneId zone)
クロックは通常、現在の時点を取得してから、タイムゾーンを使用してそれを日付または時間に変換します。このメソッドは、プロパティが似ていて異なるタイムゾーンを使用するクロックを返します。
zone
- 変更先のタイムゾーン、null以外public long millis()
これは、1970-01-01T00:00Z (UTC)から測定された、ミリ秒ベースの時点を返します。これは、System.currentTimeMillis()
の定義と同等です。
ほとんどのアプリケーションは、生のミリ秒値ではなく時系列のインスタントを表す場合は、このメソッドを使用せずInstant
を使用することをお薦めします。このメソッドは、オブジェクトの作成が受け入れられない負荷の高いユース・ケースで、クロックを使用できるように提供されています。
デフォルト実装は現在、instant()
を呼び出します。
DateTimeException
- 時点を取得できない場合、ほとんどの実装ではスローされないpublic abstract Instant instant()
これは、クロックによって定義された現在の時点を表す時点を返します。
DateTimeException
- 時点を取得できない場合、ほとんどの実装ではスローされないpublic boolean equals(Object obj)
クロックは、その状態に基づいてequalsを比較し、Object.equals(java.lang.Object)
の規定を満たすように、このメソッドをオーバーライドするはずです。オーバーライドされない場合、動作はObject.equals(java.lang.Object)
によって定義されます。
equals
、クラス: Object
obj
- チェックするオブジェクト、nullはfalseを返すObject.hashCode()
、HashMap
public int hashCode()
クロックは、その状態に基づいて、Object.hashCode()
の規定を満たすように、このメソッドをオーバーライドするはずです。オーバーライドされない場合、動作はObject.hashCode()
によって定義されます。
hashCode
、クラス: Object
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.