Au coeur du JDK : 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 !
Dommage que MINUTES, HOURS et DAYS ne soient apparus qu’en JDK6
Sympa,
On a plutôt tendance a utiliser les constantes d’apache commons ou de joda, mais ça fait du bien de savoir qu’on peut faire la même chose dans le JDK…