Existe-t-il un paquet Java contenant toutes les constantes de temps ennuyeuses telles que millisecondes/secondes/minutes dans une minute/heure/jour/année ? Je n'aimerais pas avoir à dupliquer quelque chose comme ça.
Réponses
Trop de publicités?J'opterais pour java Unité de temps si vous n'incluez pas déjà joda-time dans votre projet. Vous n'avez pas besoin d'inclure une librairie externe et c'est assez simple.
Lorsque vous avez besoin de ces "constantes gênantes", c'est généralement pour multiplier un nombre afin de le convertir en unités. Au lieu de cela, vous pouvez utiliser TimeUnit pour convertir simplement les valeurs sans multiplication explicite.
Ceci :
long millis = hours * MINUTES_IN_HOUR * SECONDS_IN_MINUTE * MILLIS_IN_SECOND;
devient ceci :
long millis = TimeUnit.HOURS.toMillis(hours);
Si vous exposez une méthode qui accepte une valeur en millis, par exemple, et que vous devez ensuite la convertir, il est préférable de suivre ce que fait l'API de concurrence Java :
public void yourFancyMethod(long somePeriod, TimeUnit unit) {
int iNeedSeconds = unit.toSeconds(somePeriod);
}
Si vous avez vraiment besoin de ces constantes, vous pouvez toujours obtenir, par exemple, les secondes d'une heure en appelant :
int secondsInHour = TimeUnit.HOURS.toSeconds(1);
Solution Java 8 / java.time
En lieu et place de TimeUnit
il se peut que, pour une raison ou une autre, vous préfériez l'option Durée de l'accord de la classe java.time l'emballage :
Duration.ofDays(1).getSeconds() // returns 86400;
Duration.ofMinutes(1).getSeconds(); // 60
Duration.ofHours(1).toMinutes(); // also 60
//etc.
En outre, si vous alliez plus loin et analysiez le fonctionnement de la méthode Duration.ofDays(..), vous verriez le code suivant :
return create(Math.multiplyExact(days, SECONDS_PER_DAY), 0);
donde SECONDS_PER_DAY
est une constante statique protégée par un paquet de Heure locale classe.
/**
* Seconds per day.
*/
static final int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;
//there are also many others, like HOURS_PER_DAY, MINUTES_PER_HOUR, etc.
Je pense que l'on peut supposer que s'il existait un paquet définissant "toutes les constantes de temps ennuyeuses comme les milisecondes/secondes/minutes", comme vous les appelez, je pense que les développeurs du SDK Java l'auraient utilisé.
Pourquoi cette LocalTime
Le fait que les constantes soient protégées et non publiques est une bonne question, je pense qu'il y a une raison à cela. Pour l'instant, il semble que vous deviez vraiment les copier et les maintenir par vous-même.
Joda-Time contient des classes telles que Jours qui contiennent des méthodes telles que [toStandardSeconds()](http://www.joda.org/joda-time/apidocs/org/joda/time/Hours.html#toStandardSeconds()) . Vous pouvez donc écrire :
int seconds = Days.ONE.toStandardSeconds();
bien qu'il semble un peu verbeux et qu'il ne soit peut-être utile que pour des scénarios plus complexes tels que les années bissextiles, etc.
La Java Unité de temps semble correspondre à ce que vous souhaitez
- Réponses précédentes
- Plus de réponses