Comment faire pour convertir les secondes dans ce format “HH:mm:ss”
Je veux convertir les secondes/millisecondes dans ce format "HH:mm:ss" (pour esamples, de 5 secondes à 00:00:05). J'ai essayé d'obtenir que le format de cette façon:
int millis = 5000;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(millis);
De cette façon, j'obtiens "01:00:05" et non pas "00:00:05". Où ai-je tort?
- Cette question a de meilleures réponses ici et ici.
- double possible de Comment faire pour convertir quelques Millisecondes à "X minutes, les x secondes" en Java?
- double possible de Comment convertir le temps en secondes à HH:MM:SS dans MySQL?
Vous devez vous connecter pour publier un commentaire.
Fuseaux horaires.
La valeur long
5000
est à dire 5 secondes après l'époque. Pour la majorité des fuseaux horaires, 5 secondes après l'époque n'est pas 5 secondes après minuit, heure locale.Java 8 update:
java.time.LocalTime
va gérer l'idée d'une horloge murale "l'heure de la journée" sans que vous ayez à vous soucier de les fuseaux horaires et les jours implicite dansjava.util.Date
. Si vous pouvez utiliser Java 8, et votre durées sera toujours moins d'une journée, puis une version correcte de votre exemple peut être aussi simple que:(Je suppose que, à strictement parler,
java.time.Duration
est une meilleure modèle de ce que vous voulez, en ce qu'il représente un certain nombre de secondes, plutôt que d'un moment de la journée. Mais c'est une douleur au format hh:mm:ss, donc si vous êtes toujours affaire avec des sous-24hour valeurs, TimeOfDay vous donne cette mise en forme pour gratuit et est par ailleurs l'équivalent.)Si vous êtes coincé avec Java 7 ou ci-dessous, puis de spécifier explicitement un fuseau horaire de
GMT
dans votre exemple de code devrait vous donner le résultat que vous attendez.Voici un Scala de RÉPLICATION de session montrant le problème, et Java 7 solution, sur ma machine:
De sorte que vous pouvez voir que mon fuseau horaire par défaut est
GB
, qui a 1 heure de décalage de GMT au moment indiqué par5000L
. Réglage du fuseau horaire de GMT gievs de la sortie attendue de00:00:05
.df.getTimeZone()
dans le code ci-dessus renvoieid="Europe/London"
et j'obtiens le même résultat de "01:00:05".df.setTimeZone(TimeZone.getTimeZone("GMT"));
DD
commence le décompte à partir de 1, donc 34h serait 02:10:00:00, au lieu de 01:10:00:00), ou pour afficher plus de 24 heures (par exemple 34:00:00).J'ai obtenu ce travail. Laissez-moi savoir si cela fonctionne pour vous. Semble comme beaucoup de lignes pour faire quelque chose de simple en apparence..
java.time
paquet.Vous devriez obtenir SimpleDateFormat avec Locale argument.
J'ai écrit une simple fonction d'utilité pour cette tâche qui ne nécessite aucune version de Java ni instancie tous les objets inutiles:
Contrairement à certains autres solutions ici, cela peut même traiter jusqu'à 100 heures
Java 9 réponse:
(pas encore testé)
La
toXxPart
méthodes sont décrites dans les docs de l'API pour Java 9.