web-dev-qa-db-fra.com

Conversion de millisecondes en minutes et en secondes?

J'ai jeté un coup d'œil aux questions précédentes, mais aucune ne possédait la réponse que je cherchais. Comment convertir des millisecondes d'une méthode StopWatch en minutes et en secondes? J'ai:

 watch.start();

pour démarrer le chronomètre et

  watch.stop();

arrêter la montre. J'ai plus tard

  watch.getTime();

qui retourne en millisecondes. Je veux qu'il revienne en secondes et en minutes. Comment puis-je m'y prendre? Je cherche un moyen de le faire sans multiplier/diviser par 1000, mais plutôt une méthode qui rendra le calcul plus lisible et moins sujet aux erreurs.

61
user2426902

Je suggérerais d'utiliser TimeUnit. Vous pouvez l'utiliser comme ceci:

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

Après avoir converti les millisecondes 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 minutes".

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

tl; dr

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

Java 9 et ultérieur

Dans Java 9 et versions ultérieures, créez un Duration et appelez les méthodes to…Part. Dans ce cas: toMinutesPart et toSecondsPart.

Capturez le début et la fin 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 );

Interrogez pour chaque partie, les minutes et les secondes.

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

Vous voudrez peut-être aussi savoir si votre chronomètre a fonctionné normalement.

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

Java 8

Dans Java 8, la classe Duration n'a pas de méthode to…Part. Vous devrez faire des maths comme indiqué dans les autres réponses.

long entireDurationAsSeconds = d.getSeconds();

Ou laissez Duration faire le calcul.

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

Voir code live sur IdeOne.com .

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

d.toString (): PT2M15S

d.getSeconds (): 135

Écoulé: 2M 15S

Résolution

Pour votre information, la résolution des méthodes now a été modifiée entre Java 8 et Java 9. Voir cette question .

  • Java 9 capture l’instant avec une résolution pouvant aller jusqu’à quelques 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 MacBook Pro Retina avec macOS Sierra.
  • Java 8 ne saisit le moment que jusqu'à quelques millisecondes. L'implémentation de Clock est limitée à une résolution en millisecondes. Ainsi, vous pouvez stocker des valeurs en nanosecondes, mais seulement les capturer en millisecondes.
12
Basil Bourque

Ceci est juste des mathématiques de base. 1000 millisecondes = 1 seconde et 60000 millisecondes = 1 minute; Alors fais juste,

int seconds=(millis/1000)%60;

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

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 " Link ", il est expliqué en détail.

7
Ashish Yadav

Je créais une application de lecteur mp3 pour Android, donc je l'ai fait comme ceci 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;
}
7
Jeeva

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 fractionnelles n'ont pas de valeur, alors: faites 100% 60 = 40 secondes pour trouver le reste, puis la division entière 100/60 = 1 minute, avec 40 secondes restantes. Réponse: 1 minute, 40 secondes.

4
Kon

Pour obtenir l'heure, les minutes et les secondes telles qu'elles apparaissent sur la montre, essayez ce code.

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
4
Harpreet Singh

Pour convertir le temps en millis directement en minutes: deuxième format, vous pouvez utiliser cette

String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));

Cela retournera une chaîne avec le temps dans un formatage correct. Cela a fonctionné pour moi.

3
Priyankchoudhary

Vous pouvez essayer de procéder de cette façon:

Passer la valeur en ms de

Long ms = watch.getTime();

à

getDisplayValue(ms)

Mise en œuvre Kotlin:

fun getDisplayValue(ms: Long): String {
        val duration = Duration.ofMillis(ms)
        val minutes = duration.toMinutes()
        val seconds = duration.minusMinutes(minutes).seconds

        return "${minutes}min ${seconds}sec"
}

Implémentation Java:

public String getDisplayValue(Long ms) {
        Duration duration = Duration.ofMillis(ms);
        Long minutes = duration.toMinutes();
        Long seconds = duration.minusMinutes(minutes).getSeconds();

        return minutes + "min " + seconds "sec"
}
3
Irwin Nawrocki

Je ne pense pas que Java 1.5 prenne en charge TimeUnit en simultané. Sinon, je suggérerais pour TimeUnit. Ci-dessous est basé sur une approche mathématique pure.

stopWatch.stop();
long milliseconds = stopWatch.getTime();

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
3
Mikey

Voici une solution simple. Exemples d'appels pouvant être utilisés avec n'importe quelle méthode:

  • StopWatch.start();
  • StopWatch.stop();
  • StopWatch.displayDiff(); affiche la différence en minutes et en secondes entre le début et la fin. (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.Lansing
package com.v3mobi.userpersistdatetime;

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.widget.Toast;

import Java.util.Date;
import Java.util.concurrent.TimeUnit;

public class UserActivity extends AppCompatActivity {

    Date startDate;
    Date endDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
        startDate = Java.util.Calendar.getInstance().getTime(); //set your start time
    }

    @Override
    protected void onStop() {
        super.onStop();
        endDate = Java.util.Calendar.getInstance().getTime(); // set  your end time

        chekUserPersistence();

    }

    private void chekUserPersistence()
    {
        long duration = endDate.getTime() - startDate.getTime();
//        long duration = 301000;

        long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);         // minutes ok
        long secs = (duration/1000) % 60;         // minutes ok


        Toast.makeText(UserActivity.this, "Diff  "
                +  diffInMinutes + " : "+ secs , Toast.LENGTH_SHORT).show();

        System.out.println("Diff  " + diffInMinutes +" : "+ secs );

        Log.e("keshav","diffInMinutes -->" +diffInMinutes);
        Log.e("keshav","secs -->" +secs);
        finish();
    }
}
0
Keshav Gera