Leitfaden für die Java Clock-Klasse

Anleitung zur Java Clock Class

1. Überblick

In diesem Tutorial gehen wir zulook into the Java Clock class from the java.time package. Wir werden erklären, was dieClock-Klasse ist und wie wir sie verwenden können.

2. DieClock Klasse

Clock wurde in Java 8 hinzugefügt und bietet Zugriff auf einen Zeitpunkt mit der besten verfügbaren Systemuhr 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. Bei globalisierten 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 KlasseClockist abstrakt, daher können wir keine Instanz davon erstellen. Die folgenden Factory-Methoden können verwendet werden:

  • offset(Clock, Duration) gibt eine Uhr zurück, die um die angegebenenDuration 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 die gleichenInstant zurück. Der häufigste 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 KlasseClockverfügbar sind.

2.1. instant()

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

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 einClock-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 dasClock-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 einClock-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 (unter der Annahme, dass unsere Standardzeitzone „Asien / Kalkutta“ ist):

SystemClock[Asia/Calcutta]

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

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

2.5. millis()

Diese Methode gibt den aktuellen Zeitpunkt der Uhr in Millisekunden zurück. Es werdento allow the use of the clock in high-performance use cases where the creation of an object would be unacceptable bereitgestellt. Diese Methode kann an Orten verwendet werden, an denen wir sonstSystem.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 Basisuhr mit der angegebenen hinzugefügten Dauer zurück.

Wenn die Dauer negativ ist, ist der resultierende Zeitpunkt früher als der angegebene Grundtakt.

Using offset, we can get instants in the past and future of the given base clock. 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 aus dem angegebenen Taktrounded to the nearest occurrence of the specified duration zurück. Die angegebene Zeitdauer 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 Sofort-Ticking in ganzen Sekunden für die angegebene Zeitzone zurück. Bei dieser Uhr wird das Feldnano-of-secondimmer 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 mittick() erreicht werden:

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

2.9. tickMinutes()

Diese statische Methode gibt die Uhrzeit in ganzen Minuten für die angegebene Zeitzone zurück. Bei dieser Uhr werden die Feldernano-of-second undsecond-of-minute immer auf Null gesetzt:

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

wird herstellen:

2018-04-07T17:26:00Z

Das gleiche kann mittick() erreicht werden:

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

2.10. withZone()

Diese Methode gibt eine Kopie dieser Uhr mit einer anderen Zeitzone zurück.

Wenn wir eine Uhrinstanz für eine bestimmte Zeitzone haben, können wir eine Kopie dieser Uhr für eine andere Zeitzone erstellen:

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

wird herstellen:

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

2.11. getZone()

Diese Methode gibt die Zeitzone der angegebenenClock zurück.

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

wird herstellen:

Asia/Calcutta

2.12. Fest()

Diese Methode gibt eine Uhr zurück, diealways returns the same instant beträgt. 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 JavaClock-Klasse und den verschiedenen Möglichkeiten befasst, wie wir sie mit den verfügbaren Methoden verwenden können.

Wie immer sind die Codebeispieleover on GitHub verfügbar.