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.
Je suggérerais d'utiliser TimeUnit
. Vous pouvez l'utiliser comme ceci:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
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);
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
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 ) ;
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
Pour votre information, la résolution des méthodes now
a été modifiée entre Java 8 et Java 9. Voir cette question .
Clock
est limitée à une résolution en millisecondes. Ainsi, vous pouvez stocker des valeurs en nanosecondes, mais seulement les capturer en millisecondes.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;
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.
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;
}
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.
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
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.
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"
}
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);
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");
}
}
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();
}
}