Guide de la classe d'horloge Java

1. Vue d'ensemble

Dans ce tutoriel, nous allons examiner la classe Java Clock à partir du package java.time . Nous expliquerons ce qu'est la classe Clock et comment nous pouvons l'utiliser.

2. La classe d' horloge

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

La date et l'heure actuelles dépendent du fuseau horaire et, 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 correct.

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 classe Clock 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 de la durée spécifiée. Le principal cas d'utilisation pour cela est de simuler l'exécution dans le futur ou le passé
  • systemUTC () - renvoie une horloge représentant le fuseau horaire UTC
  • fixed (Instant, ZoneId) - renvoie toujours le même Instant . Le principal cas d'utilisation pour cela est dans les tests, 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 classe Clock .

2.1. instant()

Cette méthode retourne un instant représentant l'instant courant 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. systèmeUTC ()

Cette méthode renvoie un objet Clock 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. système()

Cette méthode statique renvoie l' objet Clock 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 objet Clock représentant l'instant actuel 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 "Asia / Calcutta"):

SystemClock[Asia/Calcutta]

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

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

2.5. millis ()

Cette méthode retourne l'instant courant de l'horloge en millisecondes. Il est prévu pour permettre l'utilisation de l'horloge dans des cas d'utilisation haute performance où la création d'un objet serait inacceptable . Cette méthode peut être utilisée dans des endroits où nous aurions autrement utilisé System.currentTimeInMillis () :

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

produira:

1523104441258

2.6. décalage()

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, alors l'instant d'horloge résultant sera antérieur à l'horloge de base donnée.

En utilisant le décalage , nous pouvons obtenir des instants dans le passé et le futur de l'horloge de base donnée. 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. cocher()

Cette méthode statique renvoie les instants de l'horloge spécifiée arrondis à l'occurrence la plus proche de la durée spécifiée . 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. tickSecondes ()

Cette méthode statique renvoie le ticking instantané actuel en secondes entières pour le fuseau horaire donné. Cette horloge aura toujours le champ nano-de-seconde 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 utilisant 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()

Cette méthode renvoie une horloge qui renvoie toujours le même instant . Le cas d'utilisation principal de cette méthode est le test, où l'horloge fixe garantit 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 Java Clock et les différentes façons de l'utiliser avec les méthodes disponibles.

Comme toujours, les exemples de code sont disponibles à l'adresse over sur GitHub.