Anleitung zur Java Clock Class

1. Übersicht

In diesem Tutorial werden wir uns die Java Clock- Klasse aus dem Paket java.time ansehen . Wir werden erklären, was die Clock- Klasse ist und wie wir sie verwenden können.

2. Die Clock - Klasse

Clock wurde in Java 8 hinzugefügt und bietet mithilfe der besten verfügbaren Systemuhr Zugriff auf einen Zeitpunkt und kann als Zeitanbieter verwendet werden, der zu Testzwecken effektiv gestoppt werden kann.

Das aktuelle Datum und die aktuelle Uhrzeit hängen von der Zeitzone ab. Für globalisierte Anwendungen ist ein Zeitanbieter erforderlich, um sicherzustellen, dass Datum und Uhrzeit mit der richtigen Zeitzone erstellt werden.

Mit dieser Klasse können wir testen, ob unsere Codeänderungen in verschiedenen Zeitzonen funktionieren oder ob bei Verwendung einer festen Uhr diese Zeit keinen Einfluss auf unseren Code hat.

Die Clock- Klasse ist abstrakt, daher können wir keine Instanz davon erstellen. Die folgenden Werksmethoden können verwendet werden:

  • offset (Clock, Duration) - Gibt eine Uhr zurück, die um die angegebene Dauer versetzt ist . Der Hauptanwendungsfall hierfür ist die Simulation des Laufens in der Zukunft oder in der Vergangenheit
  • systemUTC () - gibt eine Uhr zurück, die die UTC-Zeitzone darstellt
  • fixed (Instant, ZoneId) - gibt immer den gleichen Instant zurück . Der führende Anwendungsfall hierfür ist das Testen, bei dem die feste Uhr sicherstellt, dass die Tests nicht von der aktuellen Uhr abhängig sind

Wir werden uns die meisten Methoden ansehen, die in der Clock- Klasse verfügbar sind .

2.1. sofortig()

Diese Methode gibt einen Zeitpunkt zurück, der den von der Uhr definierten aktuellen Zeitpunkt darstellt:

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

wird herstellen:

2018-04-07T03:59:35.555Z

2.2. systemUTC ()

Diese Methode gibt ein Clock- Objekt zurück, das den aktuellen Zeitpunkt in der UTC-Zone darstellt:

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

wird herstellen:

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

2.3. System()

Diese statische Methode gibt das Clock- Objekt für die Zeitzone zurück, die durch die angegebene Zeitzonen-ID identifiziert wird:

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

wird herstellen:

2018-04-04T18:00:31.376Z

2.4. systemDefaultZone ()

Diese statische Methode gibt ein Clock- Objekt zurück, das den aktuellen Zeitpunkt darstellt und die Standardzeitzone des Systems verwendet, auf dem es ausgeführt wird:

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

Die obigen Zeilen führen zu folgendem Ergebnis (vorausgesetzt, unsere Standardzeitzone ist „Asien / Kalkutta“):

SystemClock[Asia/Calcutta]

Wir können das gleiche Verhalten erreichen, indem wir ZoneId.systemDefault () übergeben :

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

2.5. millis ()

Diese Methode gibt den aktuellen Zeitpunkt der Uhr in Millisekunden zurück. Es wird bereitgestellt , um die Verwendung der Uhr in Hochleistungsanwendungsfällen zu ermöglichen, in denen die Erstellung eines Objekts nicht akzeptabel wäre . Diese Methode kann an Stellen verwendet werden, an denen wir sonst System.currentTimeInMillis () verwendet hätten :

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

wird herstellen:

1523104441258

2.6. offset ()

Diese statische Methode gibt einen Moment von der angegebenen Basistaktung mit der angegebenen hinzugefügten Dauer zurück.

Wenn die Dauer negativ ist, ist der resultierende Taktzeitpunkt früher als der angegebene Basistakt.

Mit Offset können wir Momente in der Vergangenheit und Zukunft des gegebenen Basistakts erhalten. Wenn wir eine Dauer von Null überschreiten, erhalten wir dieselbe Uhr wie die angegebene Basisuhr:

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());

wird herstellen:

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

2.7. Tick()

Diese statische Methode gibt Augenblicke von der angegebenen Uhr zurück , die auf das nächste Auftreten der angegebenen Dauer gerundet sind . Die angegebene Taktdauer muss positiv sein:

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());

wird herstellen:

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

2.8. tickSeconds ()

Diese statische Methode gibt das aktuelle sofortige Ticken in ganzen Sekunden für die angegebene Zeitzone zurück. Bei dieser Uhr wird das Nano-Sekunden- Feld immer auf Null gesetzt:

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

wird herstellen:

2018-04-07T17:40:23Z

Das gleiche kann mit tick () erreicht werden :

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()

Diese Methode gibt eine Uhr zurück, die immer den gleichen Zeitpunkt zurückgibt . Der Hauptanwendungsfall für diese Methode ist das Testen, bei dem die feste Uhr sicherstellt, dass die Tests nicht von der aktuellen Uhr abhängig sind.

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

wird herstellen:

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

3. Fazit

In diesem Artikel haben wir uns mit der Java Clock- Klasse und den verschiedenen Möglichkeiten befasst, wie wir sie mit den verfügbaren Methoden verwenden können.

Wie immer sind die Codebeispiele auf GitHub verfügbar.