java - horas - Conversión de milisegundos a minutos y segundos?
milisegundos a segundos (9)
tl; dr
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Java 9 y posterior
En Java 9 y posterior, cree una Duration
y llame to…Part
métodos de la to…Part
. En este caso: toMinutesPart
y toSecondsPart
.
Capture el inicio y la detención de su cronómetro.
Instant start = Instant.now();
…
Instant stop = Instant.now();
Representa el tiempo transcurrido en un objeto de Duration
.
Duration d = Duration.between( start , stop );
Interrogue por cada parte, los minutos y los segundos.
int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();
También es posible que desee ver si su cronómetro funcionaba demasiado.
Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Java 8
En Java 8, la clase Duration
carece to…Part
Métodos de to…Part
. Tendrá que hacer matemática como se muestra en las otras respuestas.
long entireDurationAsSeconds = d.getSeconds();
O deja que Duration
haga los cálculos.
long minutesPart = d.toMinutes();
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Vea el código en vivo en IdeOne.com .
Intervalo: 2016-12-18T08: 39: 34.099Z / 2016-12-18T08: 41: 49.099Z
d.toString (): PT2M15S
d.getSeconds (): 135
Transcurrido: 2M 15S
Resolución
FYI, la resolución de los métodos now
cambió entre Java 8 y Java 9. Consulte esta pregunta .
- Java 9 captura el momento con una resolución tan fina como nanosegundos. (dependiendo de la capacidad del hardware de su computadora)
- Java 8 captura el momento solo hasta milisegundos. La implementación de
Clock
está limitada a una resolución de milisegundos. De modo que puede almacenar valores en nanosegundos, pero solo puede capturarlos en milisegundos.
He revisado las preguntas anteriores, pero ninguna tenía la respuesta que estaba buscando. ¿Cómo convierto milisegundos de un método de cronómetro en minutos y segundos? Yo tengo:
watch.start();
para iniciar el cronómetro y
watch.stop();
para detener el reloj Luego tengo
watch.getTime();
que devuelve Milliseconds. Quiero que regrese en segundos y minutos. ¿Cómo voy a hacerlo? Estoy buscando una manera de hacerlo sin multiplicar / dividir por 1000, sino más bien un método que hará que todo el cálculo sea más legible y menos propenso a errores.
Aquí está el programa completo
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 );
}
}
Encontré este programa aquí " Link " allí se explica en detalle.
Aquí hay una solución simple. Ejemplos de llamadas que podrían usarse en cualquier método:
-
StopWatch.start();
-
StopWatch.stop();
StopWatch.displayDiff();
muestra diferencia en minutos y segundos entre inicio y fin. (tiempo transcurrido)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"); } }
Después de convertir millis a segundos (dividiendo por 1000), puede usar / 60
para obtener el valor de minutos, y % 60
(resto) para obtener el valor de "segundos en minutos".
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (millis / 1000) % 60;
Estaba creando una aplicación de reproductor de mp3 para Android, así que lo hice así para obtener la hora y la duración actual
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;
}
Esto es solo matemática básica. 1000 milisegundos = 1 segundo y 60000 milisegundos = 1 minuto; Así que solo hazlo,
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
No creo que Java 1.5 admita TimeUnit concurrente. De lo contrario, sugeriría para TimeUnit. A continuación se basa en el enfoque matemático puro.
stopWatch.stop();
long milliseconds = stopWatch.getTime();
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
Sugeriría usar TimeUnit
. Puedes usarlo así:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
X milisegundos = X / 1000 segundos = (X / 1000) / 60 minutos
Si tiene 100,000 milisegundos, divida este valor entre 1,000 y le quedan 100 segundos. Ahora 100/60 = 1.666 ~ minutos, pero los minutos fraccionarios no tienen valor, entonces: haga 100% 60 = 40 segundos para encontrar el resto, luego la división entera 100/60 = 1 minuto, con 40 segundos restantes. Respuesta: 1 minuto, 40 segundos.