114 votes

Convertir des millisecondes en minutes et secondes ?

J'ai parcouru les questions précédentes, mais aucune n'avait la réponse que je cherchais. Comment convertir les millisecondes d'une méthode StopWatch en minutes et secondes ? J'ai :

 watch.start();

pour lancer le chronomètre et

  watch.stop();

pour arrêter la montre. Plus tard, j'ai

  watch.getTime();

qui renvoie des Millisecondes. Je veux qu'il renvoie les secondes et les minutes. Comment dois-je m'y prendre ? Je cherche 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.

234voto

Avi Points 4056

Je suggère d'utiliser TimeUnit . Vous pouvez l'utiliser comme ceci :

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);

65voto

Itay Maman Points 15470

Après avoir converti les millis en secondes (en divisant par 1000), vous pouvez utiliser / 60 pour obtenir la valeur des minutes, et % 60 (reste) pour obtenir la valeur "secondes en minute".

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);

40voto

Basil Bourque Points 8938

En résumé

Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;

Java 9 et versions ultérieures

En Java 9 et plus, créez un Duration et appeler le to…Part méthodes. Dans ce cas : toMinutesPart y toSecondsPart .

Capturez le démarrage et l'arrêt de votre chronomètre.

Instant start = Instant.now(); 
…
Instant stop = Instant.now();

Représenter le temps écoulé dans un Duration objet.

Duration d = Duration.between( start , stop );

Interrogez pour chaque partie, les minutes et les secondes.

int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();

Vous pouvez également vérifier si votre chronomètre a fonctionné plus longtemps que prévu.

Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;

Java 8

En Java 8, le Duration la classe manque to…Part méthodes. Vous devrez faire des calculs comme indiqué dans les autres réponses.

long entireDurationAsSeconds = d.getSeconds();

Ou laissez Duration Faites le calcul.

long minutesPart = d.toMinutes(); 
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;

Véase code en direct dans IdeOne.com .

Interval: 2016-12-18T08:39:34.099Z/2016-12-18T08:41:49.099Z

d.toString() : PT2M15S

d.getSeconds() : 135

Temps écoulé : 2M 15S

Résolution

Pour info, la résolution de now ont changé entre Java 8 et Java 9. Voir cette question .

  • Java 9 capture l'instant avec une résolution aussi fine que des nanosecondes. La résolution dépend de la capacité du matériel de votre ordinateur. Je vois des microsecondes (six chiffres de la fraction décimale) sur un MacBook Pro Retina avec macOS Sierra.
  • Java 8 ne capture l'instant que jusqu'à la milliseconde. L'implémentation de Clock est limitée à une résolution de millisecondes. Vous pouvez donc magasin en nanosecondes mais seulement capture en millisecondes.

À propos de java.time

Le site java.time est intégré à Java 8 et aux versions ultérieures. Ces classes remplacent les anciennes classes héritage les classes de date et d'heure telles que java.util.Date , Calendar , & SimpleDateFormat .

Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez sur Stack Overflow de nombreux exemples et explications. La spécification est JSR 310 .

Le site Joda-Time Le projet, actuellement en mode de maintenance conseille de migrer vers le java.time classes.

Vous pouvez échanger java.time directement avec votre base de données. Utilisez un Pilote JDBC conforme à JDBC 4.2 ou plus tard. Pas besoin de ficelles, pas besoin de java.sql.* classes.

Où obtenir les classes java.time ?

Table of which java.time library to use with which version of Java or Android

16voto

ZeroErr0r Points 1606

J'ai créé une application de lecteur mp3 pour Android, et j'ai procédé de la manière suivante pour obtenir l'heure et la durée actuelles.

 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;
}

13voto

Dulanga Points 1316

Ce ne sont que des mathématiques de base. 1000 millisecondes=1 seconde et 60000 millisecondes = 1 minute ; Donc, il suffit de faire,

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X