Problème :
Un développeur travaillant avec un compte à rebours rencontre difficulté à convertir les millisecondes au format "hh:mm:ss" souhaité. Leur première tentative a abouti à un affichage incorrect de l'heure, en particulier pour les valeurs dépassant une heure.
Solution :
Le problème principal provenait d'un défaut logique dans la conversion des heures en millisecondes à l'aide de minutes au lieu d'heures. Plus précisément, le code utilisé :
TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))
alors qu'il aurait dû l'être :
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))
Démonstration de code :
Voici un extrait de code révisé qui formate correctement les millisecondes en "hh:mm:ss":
String hms = 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)));
Cas de test :
long millis = 3600000; String hms = ... // Replace with revised code from above System.out.println(hms); // Expected output: 01:00:00
De plus, le code peut être optimisé à l'aide de la division de module au lieu de la soustraction :
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));
Les deux variantes obtiennent le formatage "hh:mm:ss" correct et exploitent l'API TimeUnit pour gérer les conversions de manière transparente.
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!