Conversion des millisecondes au format "hh:mm:ss"
Vous pouvez rencontrer une situation dans laquelle vous devez convertir les millisecondes au format familier " hh:mm:ss", généralement utilisé pour représenter l'heure. Cela peut être une exigence courante dans les applications, telles que les comptes à rebours.
Comprendre le problème
Vous avez peut-être essayé d'utiliser le code suivant pour effectuer la conversion :
<code class="java">//hh:mm:ss String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));</code>
Cependant, ce code pourrait ne pas fonctionner comme prévu. Par exemple, pour une entrée de 3 600 000 ms (représentant 1 heure), vous obtenez « 01:59:00 » au lieu du « 01:00:00 » correct.
Identification du problème
En y regardant de plus près, le problème réside dans cette ligne :
<code class="java">TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))</code>
Ici, vous convertissez des heures en millisecondes en utilisant des minutes au lieu d'heures.
Correction la logique
Le code correct doit utiliser TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) à la place :
<code class="java">//hh:mm:ss String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));</code>
Ce changement garantit que la conversion de l'heure est fait correctement, et vous obtiendrez le résultat souhaité de "01:00:00" pendant 3600000ms.
Version simplifiée
Vous pouvez simplifier davantage le code en utilisant un division de module au lieu de soustraction :
<code class="java">String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1), TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));</code>
Cette version reste efficace tout en fournissant les mêmes résultats précis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!