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 !
