Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Au coeur du JDK : l'enum TimeUnit

Aujourd'hui, je vais attirer votre attention sur une petite classe très discrète, pourtant présente depuis Java 5 : java.util.concurrent.TimeUnit.

Comme son nom l'indique, cet enum permet de représenter les unités temporelles usuelles. Rien de bien révolutionnaire, certes, mais ça peut éviter de réinventer la roue dans chacun de nos projets.

NANOSECONDS
MICROSECONDS
MILLISECONDS
SECONDS
MINUTES
HOURS
DAYS

Là où ça devient plus intéressant, c'est que TimeUnit propose des méthodes de conversion entre les unités :

convert(long duration, TimeUnit sourceUnit)
toMillis(long duration)
toSeconds(long duration)
toHours(long duration)
...

En particulier, vu le nombre de méthodes qui prennent des millisecondes en paramètre (Thread.sleep(), Object.wait(), etc.), la méthode toMillis() pourra rendre de grands services et clarifier le code :

// Avant : long oneHourInMillis = 1000 * 60 * 60;
long oneHourInMillis = TimeUnit.HOURS.toMillis(1);

Enfin, cerise sur le gâteau (ou plutôt nain sur la bûche, en cette période de fêtes), TimeUnit facilite l'appel des principales méthodes utilisant des millisecondes :

// Avant : Thread.sleep(1000 * 60)
TimeUnit.MINUTES.sleep(1);
 
// Avant : Object.wait(1000 * 60 * 2)
TimeUnit.MINUTES.timedWait(object, 2)
 
// Avant : anotherThread.join(1000 * 60 * 3)
TimeUnit.MINUTES.timedJoin(anotherThread, 3)

En conclusion, maintenant que vous connaissez la discrète mais très utile classe TimeUnit, je pense que vous ne voudrez plus jamais calculer 1000 * 60 * 60 * 24 pour représenter... une simple journée !


Commentaires

1. Le mercredi 5 janvier 2011, 08:06 par romaintaz

Merci Olivier pour cette découverte. Il s'agit d'une enum effectivement très (voire trop) discrète, car bien utile !

2. Le mercredi 5 janvier 2011, 13:14 par Simon

Belle découverte en effet qui va aider à améliorer notre code. A noter que DAYS, HOURS et MINUTES n'existent que depuis la version 1.6, ce qui enlève un peu d'intérêt sur java 5.

3. Le mercredi 5 janvier 2011, 20:28 par Olivier Croisier

J'aime bien partir à la découverte de ces petites classes bien planquées dans le JDK... C'est chouette :)

4. Le mercredi 5 janvier 2011, 22:55 par reda

Très utile. Merci beaucoup.

5. Le mercredi 12 janvier 2011, 00:19 par ajeanson

Bien utile, merci ;)

6. Le mardi 17 janvier 2012, 05:53 par PhiLho

Super utile, en effet, on a trop de 60, 3600 ou autres en dur dans notre code !
Ce n'est pas un calendar, pas d'unité au-delà du jour, mais on a Joda-Time pour ça, je suppose.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.