Guide de la classe d’horloge Java

Guide de la classe d'horloge Java

1. Vue d'ensemble

Dans ce didacticiel, nous allons àlook into the Java Clock class from the java.time package. Nous allons expliquer ce qu'est la classeClock et comment nous pouvons l'utiliser.

2. La classeClock

Clock a été ajouté à Java 8 et permet d'accéder à un instant dans le temps en utilisant la meilleure horloge système disponible, et pour être utilisé comme fournisseur de temps qui peut être efficacement stubblé à des fins de test.

La date et l'heure actuelles dépendent du fuseau horaire. Pour les applications globalisées, un fournisseur d'heure est nécessaire pour garantir que la date et l'heure sont créées avec le fuseau horaire approprié.

Cette classe nous aide à tester que nos modifications de code fonctionnent avec différents fuseaux horaires ou, lors de l'utilisation d'une horloge fixe, que l'heure n'affecte pas notre code.

La classeClock est abstraite, nous ne pouvons donc pas en créer une instance. Les méthodes d'usine suivantes peuvent être utilisées:

  • offset(Clock, Duration) renvoie une horloge décalée duDuration spécifié. Le principal cas d’utilisation est de simuler une exécution future ou passée.

  • systemUTC() –  renvoie une horloge représentant le fuseau horaire UTC

  • fixed(Instant, ZoneId) –  renvoie toujours les mêmesInstant. Le principal cas d'utilisation est le test, où l'horloge fixe garantit que les tests ne dépendent pas de l'horloge actuelle.

Nous allons examiner la plupart des méthodes disponibles dans la classeClock.

2.1. instant()

Cette méthode retourne un instant représentant l'instant actuel défini par l'horloge:

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

produira:

2018-04-07T03:59:35.555Z

2.2. systemUTC()

Cette méthode retourne un objetClock représentant l'instant courant dans la zone UTC:

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

produira:

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

2.3. system()

Cette méthode statique renvoie l'objetClock pour le fuseau horaire identifié par l'ID de fuseau horaire donné:

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

produira:

2018-04-04T18:00:31.376Z

2.4. systemDefaultZone()

Cette méthode statique renvoie un objetClock représentant l'instant courant et utilisant le fuseau horaire par défaut du système sur lequel il s'exécute:

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

Les lignes ci-dessus produisent le résultat suivant (en supposant que notre fuseau horaire par défaut est «Asie / Calcutta»):

SystemClock[Asia/Calcutta]

Nous pouvons obtenir le même comportement en passantZoneId.systemDefault():

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

2.5. millis()

Cette méthode renvoie l'instant actuel de l'horloge en millisecondes. Il est fournito allow the use of the clock in high-performance use cases where the creation of an object would be unacceptable. Cette méthode peut être utilisée dans les endroits où nous aurions autrement utiliséSystem.currentTimeInMillis():

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

produira:

1523104441258

2.6. offset()

Cette méthode statique renvoie un instant à partir de l'horloge de base spécifiée, avec la durée spécifiée ajoutée.

Si la durée est négative, l'instant d'horloge résultant sera antérieur à l'horloge de base donnée.

Using offset, we can get instants in the past and future of the given base clock. Si nous passons une durée nulle, nous obtiendrons la même horloge que l’horloge de base donnée:

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

produira:

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

2.7. tick()

Cette méthode statique renvoie des instants à partir de l'horloge spécifiéerounded to the nearest occurrence of the specified duration. La durée d'horloge spécifiée doit être positive:

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

produira:

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

2.8. tickSeconds()

Cette méthode statique renvoie le tick instantané actuel en secondes entières pour le fuseau horaire indiqué. Cette horloge aura toujours le champnano-of-second mis à zéro:

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

produira:

2018-04-07T17:40:23Z

La même chose peut être obtenue en utilisanttick():

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

2.9. tickMinutes()

Cette méthode statique renvoie le tic-tac d'horloge instantané en minutes entières pour le fuseau horaire spécifié. Cette horloge aura toujours les champsnano-of-second etsecond-of-minute mis à zéro:

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

produira:

2018-04-07T17:26:00Z

La même chose peut être obtenue en utilisanttick():

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

2.10. withZone()

Cette méthode renvoie une copie de cette horloge avec un fuseau horaire différent.

Si nous avons une instance d'horloge pour un fuseau horaire spécifique, nous pouvons en faire une copie pour différents fuseaux horaires:

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

produira:

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

2.11. getZone()

Cette méthode renvoie le fuseau horaire desClock donnés.

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

produira:

Asia/Calcutta

2.12. fixé()

Cette méthode renvoie une horloge quealways returns the same instant. Le principal cas d'utilisation de cette méthode est le test, l'horloge fixe garantissant que les tests ne dépendent pas de l'horloge actuelle.

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

produira:

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

3. Conclusion

Dans cet article, nous avons plongé dans la classe JavaClock et les différentes façons dont nous pouvons l'utiliser avec les méthodes disponibles.

Comme toujours, les exemples de code sont disponiblesover on GitHub.