Javaクロッククラスのガイド

1。概要

このチュートリアルでは、我々はするつもりのJavaに見て時計からクラスjava.timeのパッケージClockクラスとは何か、そしてそれをどのように使用できるかを説明します。

2.時計クラス

ClockJava8で追加され、利用可能な最良のシステムクロックを使用して瞬時にアクセスできるようにし、テスト目的で効果的にスタブできるタイムプロバイダーとして使用できるようにします。

現在の日付と時刻はタイムゾーンによって異なります。グローバル化されたアプリケーションの場合、日付と時刻が正しいタイムゾーンで作成されるようにするには、タイムプロバイダーが必要です。

このクラスは、コードの変更がさまざまなタイムゾーンで機能すること、または固定クロックを使用している場合はその時間がコードに影響しないことをテストするのに役立ちます。

時計我々はそれのインスタンスを作成することはできませんので、クラスは、抽象的です。次のファクトリメソッドを使用できます。

  • offset(Clock、Duration)指定されたDurationだけオフセットされたクロックを返します。これの主な使用例は、将来または過去の実行をシミュレートすることです。
  • systemUTC()– UTCタイムゾーンを表す時計を返します
  • fixed(Instant、ZoneId)–常に同じInstantを返します。これの主な使用例はテストです。固定クロックにより、テストが現在のクロックに依存しないことが保証されます。

Clockクラスで使用可能なほとんどのメソッドを調べます。

2.1。インスタント()

このメソッドは、時計によって定義された現在の瞬間を表す瞬間を返します。

Clock clock = Clock.systemDefaultZone(); Instant instant = clock.instant(); System.out.println(instant);

生成されます:

2018-04-07T03:59:35.555Z

2.2。systemUTC()

このメソッドは、UTCゾーンの現在の瞬間を表すClockオブジェクトを返します。

Clock clock = Clock.systemUTC(); System.out.println("UTC time :: " + clock.instant());

生成されます:

UTC time :: 2018-04-04T17:40:12.353Z

2.3。システム()

この静的メソッドは、指定されたタイムゾーンIDで識別されるタイムゾーンのClockオブジェクトを返します。

Clock clock = Clock.system(ZoneId.of("Asia/Calcutta")); System.out.println(clock.instant());

生成されます:

2018-04-04T18:00:31.376Z

2.4。systemDefaultZone()

この静的メソッドは、現在の瞬間を表し、それが実行されているシステムのデフォルトのタイムゾーンを使用してClockオブジェクトを返します。

Clock clock = Clock.systemDefaultZone(); System.out.println(clock);

上記の行は、次の結果を生成します(デフォルトのタイムゾーンが「アジア/カルカッタ」であると仮定)。

SystemClock[Asia/Calcutta]

ZoneId.systemDefault()を渡すことで、同じ動作を実現できます。

Clock clock = Clock.system(ZoneId.systemDefault());

2.5。ミリス()

このメソッドは、時計の現在の瞬間をミリ秒単位で返します。これは、オブジェクトの作成が受け入れられない高性能のユースケースで時計を使用できるようにするために提供されています。このメソッドは、System.currentTimeInMillis()を使用していた場所で使用できます。

Clock clock = Clock.systemDefaultZone(); System.out.println(clock.millis());

生成されます:

1523104441258

2.6。オフセット()

この静的メソッドは、指定された期間が追加された指定されたベースクロックからインスタントを返します。

期間が負の場合、結果のクロックの瞬間は、指定されたベースクロックよりも早くなります。

オフセットを使用すると、指定されたベースクロックの過去と未来の瞬間を取得できます。ゼロの期間を渡すと、指定されたベースクロックと同じクロックが得られます。

Clock baseClock = Clock.systemDefaultZone(); // result clock will be later than baseClock Clock clock = Clock.offset(baseClock, Duration.ofHours(72)); System.out.println(clock5.instant()); // result clock will be same as baseClock                            clock = Clock.offset(baseClock, Duration.ZERO); System.out.println(clock.instant()); // result clock will be earlier than baseClock             clock = Clock.offset(baseClock, Duration.ofHours(-72)); System.out.println(clock.instant());

生成されます:

2018-04-10T13:24:07.347Z 2018-04-07T13:24:07.348Z 2018-04-04T13:24:07.348Z

2.7。tick()

この静的メソッドは、指定されたクロックから、指定された期間の最も近いオカレンスに丸められたインスタントを返します。指定されたクロック期間は正である必要があります。

Clock clockDefaultZone = Clock.systemDefaultZone(); Clock clocktick = Clock.tick(clockDefaultZone, Duration.ofSeconds(30)); System.out.println("Clock Default Zone: " + clockDefaultZone.instant()); System.out.println("Clock tick: " + clocktick.instant());

生成されます:

Clock Default Zone: 2018-04-07T16:42:05.473Z Clock tick: 2018-04-07T16:42:00Z

2.8。tickSeconds()

この静的メソッドは、指定されたタイムゾーンの現在の瞬間の刻々と過ぎを秒単位で返します。この時計では、常にナノ秒フィールドがゼロに設定されます。

ZoneId zoneId = ZoneId.of("Asia/Calcutta"); Clock clock = Clock.tickSeconds(zoneId); System.out.println(clock.instant());

生成されます:

2018-04-07T17:40:23Z

同じことはtick()を使用して達成することができます:

Clock clock = Clock.tick(Clock.system(ZoneId.of("Asia/Calcutta")), Duration.ofSeconds(1));

2.9。tickMinutes()

This static method returns the clock instant ticking in whole minutes for the specified timezone. This clock will always have the nano-of-second and second-of-minute fields set to zero:

ZoneId zoneId = ZoneId.of("Asia/Calcutta"); Clock clock = Clock.tickMinutes(zoneId); System.out.println(clock.instant());

will produce:

2018-04-07T17:26:00Z

The same can be achieved by using tick():

Clock clock = Clock.tick(Clock.system(ZoneId.of("Asia/Calcutta")), Duration.ofMinutes(1));

2.10. withZone()

This method returns a copy of this clock with a different time zone.

If we have a clock instance for a specific time zone, we can make a copy of that clock for different time zone:

ZoneId zoneSingapore = ZoneId.of("Asia/Singapore");   Clock clockSingapore = Clock.system(zoneSingapore);  System.out.println(clockSingapore.instant()); ZoneId zoneCalcutta = ZoneId.of("Asia/Calcutta"); Clock clockCalcutta = clockSingapore.withZone(zoneCalcutta); System.out.println(clockCalcutta.instant());

will produce:

2018-04-07T17:55:43.035Z 2018-04-07T17:55:43.035Z

2.11. getZone()

This method returns the time zone of the given Clock.

Clock clock = Clock.systemDefaultZone(); ZoneId zone = clock.getZone(); System.out.println(zone.getId());

will produce:

Asia/Calcutta

2.12. fixed()

このメソッドは、常に同じ瞬間を返す時計を返します。この方法の主な使用例はテストです。固定クロックにより、テストが現在のクロックに依存しないことが保証されます。

Clock fixedClock = Clock.fixed(Instant.parse("2018-04-29T10:15:30.00Z"), ZoneId.of("Asia/Calcutta")); System.out.println(fixedClock);

生成されます:

FixedClock[2018-04-29T10:15:30Z,Asia/Calcutta]

3.結論

この記事では、Java Clockクラスと、使用可能なメソッドでそれを使用するさまざまな方法について説明します。

いつものように、コード例はGitHubで入手できます。