janv.
2011
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
Merci Olivier pour cette découverte. Il s'agit d'une enum effectivement très (voire trop) discrète, car bien utile !
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.
J'aime bien partir à la découverte de ces petites classes bien planquées dans le JDK... C'est chouette :)
Très utile. Merci beaucoup.
Bien utile, merci ;)
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.