Convertir des millisecondes en Minutes et secondes?
j'ai examiné les questions précédentes, mais aucune n'avait la réponse que je cherchais. Comment convertir les millisecondes d'une méthode de chronomètre en Minutes et secondes? J'ai:
watch.start();
pour démarrer le chronomètre et
watch.stop();
pour arrêter la montre. J'ai plus tard
watch.getTime();
qui renvoie des millisecondes. Je veux qu'il revienne dans quelques secondes et Minutes. Comment dois-je aller sur le faire? je regarde pour un moyen de le faire sans multiplier / diviser par 1000 mais plutôt une méthode qui rendra l'ensemble du calcul plus lisible et moins sujet aux erreurs.
11 réponses
je suggère d'utiliser TimeUnit
. Vous pouvez l'utiliser comme ceci:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
après conversion des millis en secondes (en divisant par 1000), vous pouvez utiliser / 60
pour obtenir la valeur minutes, et % 60
(reste) pour obtenir la valeur" secondes en minute".
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (millis / 1000) % 60;
C'est juste des maths de base. 1000 millisecondes=1 seconde et 60000 millisecondes = 1 minute; Faites donc,
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
tl; dr
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Java 9 et plus tard
en Java 9 et plus tard, créer un Duration
et appeler les méthodes to…Part
. Dans ce cas: toMinutesPart
et toSecondsPart
.
Capturez le démarrage et l'arrêt de votre chronomètre.
Instant start = Instant.now();
…
Instant stop = Instant.now();
représente le temps écoulé dans un objet Duration
.
Duration d = Duration.between( start , stop );
interroger pour chaque partie, le procès-verbal et le deuxième.
int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();
Vous pouvez également voir si votre chronomètre couru attendre longtemps.
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
Dans Java 8, la Duration
manque de classe to…Part
méthodes. Vous aurez besoin de faire des maths, comme indiqué dans les autres Réponses.
long entireDurationAsSeconds = d.getSeconds();
ou Duration
faites le calcul.
long minutesPart = d.toMinutes();
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Voir code en direct en IdeOne.com .
intervalle: 2016-12-18T08: 39: 34.099 Z / 2016-12-18T08: 41 :49.099 Z
D. toString (): PT2M15S
D. getsecondes (): 135
écoulé: 2M 15S
résolution
POUR INFORMATION, la résolution des méthodes now
a changé entre Java 8 et Java 9. Voir cette Question .
- Java 9 capture le moment avec une résolution aussi fine que des nanosecondes. La résolution dépend de la capacité de votre matériel informatique. Je vois des microsecondes (six chiffres de fraction décimale) sur MacBook Pro Retina avec macOS Sierra.
- Java 8 capture le moment seulement jusqu'à millisecondes. La mise en œuvre de
Clock
est limitée à une résolution de millisecondes. Ainsi, vous pouvez stocker des valeurs en nanosecondes mais seulement les capturer en millisecondes.
voici le programme complet
import java.util.concurrent.TimeUnit;
public class Milliseconds {
public static void main(String[] args) {
long milliseconds = 1000000;
// long minutes = (milliseconds / 1000) / 60;
long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds);
// long seconds = (milliseconds / 1000);
long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds);
System.out.format("%d Milliseconds = %d minutes\n", milliseconds, minutes );
System.out.println("Or");
System.out.format("%d Milliseconds = %d seconds", milliseconds, seconds );
}
}
j'ai trouvé ce programme ici " lien " il est expliqué en détail.
je créais une application de lecteur mp3 pour android, donc je l'ai fait comme ceci pour obtenir l'heure actuelle et la durée
private String millisecondsToTime(long milliseconds) {
long minutes = (milliseconds / 1000) / 60;
long seconds = (milliseconds / 1000) % 60;
String secondsStr = Long.toString(seconds);
String secs;
if (secondsStr.length() >= 2) {
secs = secondsStr.substring(0, 2);
} else {
secs = "0" + secondsStr;
}
return minutes + ":" + secs;
}
X millisecondes = X / 1000 secondes = (X / 1000) / 60 minutes
si vous avez 100 000 millisecondes, divisez cette valeur par 1 000 et il vous reste 100 secondes. Maintenant 100 / 60 = 1.666~ minutes, mais les minutes fractionnaires n'ont aucune valeur, donc: faites 100% 60 = 40 secondes pour trouver le reste, puis la division entière 100 / 60 = 1 minute, avec 40 secondes de reste. Réponse: 1 minute, 40 secondes.
Je ne pense pas que Java 1.5 supporte l'Unité de temps concurrente. Sinon, je suggérerais pour TimeUnit. Ci-dessous est basé sur une approche purement mathématique.
stopWatch.stop();
long milliseconds = stopWatch.getTime();
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
pour obtenir l'heure réelle, la minute et les secondes comme apparaissent sur la montre essayez ce code
val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
Voici une solution simple. Exemples d'appels pouvant être utilisés dans n'importe quelle méthode:
-
StopWatch.start();
-
StopWatch.stop();
-
StopWatch.displayDiff();
affiche la différence en minutes et en secondes entre le démarrage et l'arrêt. (temps écoulé)import java.time.Duration; import java.time.Instant; public class StopWatch { private static Instant start; private static Instant stop; private void StopWatch() { // not called } public static void start() { start = Instant.now(); } public static void stop() { stop = Instant.now(); } public static void displayDiff() { Duration totalTime = Duration.between(start, stop); System.out.println(totalTime.toMinutes() + " Minutes " + totalTime.toMillis() / 1000 + " Seconds"); } }
pour convertir le temps en millis directement en minutes: deuxième format vous pouvez utiliser ce
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
ceci retournera une chaîne de caractères avec du temps dans le formatage approprié. Il a travaillé pour moi.