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.

50
demandé sur Avi 2013-07-13 01:31:59

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);
127
répondu Avi 2014-11-21 15:53:32

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;
25
répondu Itay Maman 2013-07-12 21:41:44

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;
9
répondu Dulanga 2013-07-12 21:58:21

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.
6
répondu Basil Bourque 2018-09-06 23:01:07

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.

5
répondu Ashish Yadav 2018-03-31 16:45:04

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;
}
4
répondu Codebreak 2018-03-09 23:51:47

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.

3
répondu Kon 2013-07-12 21:34:44

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);
3
répondu Mikey 2016-01-28 17:57:37

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
2
répondu Harpreet Singh 2018-08-22 11:26:18

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");
        }
    }
    
0
répondu R.Lansing 2016-12-17 18:20:18

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.

0
répondu Priyankchoudhary 2018-08-21 06:17:32