2012-08-25 27 views
13

Deseo obtener la hora de inicio y el tiempo de actividad de JVM. Hasta ahora he hecho esto:¿Cómo convertir milisegundos en horas y días?

public long getjvmstarttime(){ 
    final long uptime = ManagementFactory.getRuntimeMXBean().getStartTime(); 
    return uptime; 
} 

public long getjvmuptime(){ 
    final long uptime = ManagementFactory.getRuntimeMXBean().getUptime(); 
    return uptime; 
} 

Pero obtengo el tiempo en milisegundos. Cómo puedo convertir el tiempo en días y horas. Quiero mostrar los milisegundos en este formato: 3 días, 8 horas, 32 minutos. ¿Hay algún método Java interno que pueda convertir los milisegundos?

Respuesta

36

El código siguiente hace los cálculos que necesita y construye la cadena resultante:

private static final int SECOND = 1000; 
private static final int MINUTE = 60 * SECOND; 
private static final int HOUR = 60 * MINUTE; 
private static final int DAY = 24 * HOUR; 

// TODO: this is the value in ms 
long ms = 10304004543l; 
StringBuffer text = new StringBuffer(""); 
if (ms > DAY) { 
    text.append(ms/DAY).append(" days "); 
    ms %= DAY; 
} 
if (ms > HOUR) { 
    text.append(ms/HOUR).append(" hours "); 
    ms %= HOUR; 
} 
if (ms > MINUTE) { 
    text.append(ms/MINUTE).append(" minutes "); 
    ms %= MINUTE; 
} 
if (ms > SECOND) { 
    text.append(ms/SECOND).append(" seconds "); 
    ms %= SECOND; 
} 
text.append(ms + " ms"); 
System.out.println(text.toString()); 
+0

Solución encantadora –

+1

Sus declaraciones if deberían verificar si ms es mayor o igual a DÍA/MINUTO/HORA/SEGUNDO. Por ejemplo, si ms = 1000, se mostrará como 0 segundos. – MrK

44

Una vez que tenga el tiempo en milisegundos, puede usar la enumeración TimeUnit para convertirla a otras unidades de tiempo. La conversión a días solo requerirá una llamada.

long days = TimeUnit.MILLISECONDS.toDays(milliseconds); 

Conseguir las horas implicará otra llamada similar para el total de horas, entonces el cálculo de la izquierda durante horas después de los días se restan a cabo.

+0

gracias amigo, usted es el jefe .. mucho mejor que la respuesta aceptada –

+0

Mejor respuesta, siendo el método anterior y bonita tanto todos los otros como .toHours (millis) devuelven un valor largo, ¿por qué? – Matteo

+0

@VeenarM Estas soluciones se proporcionaron el mismo día, y TimeUnit ha estado presente desde Java 5. (DAYS se agregó a él con Java 7, lo que hubiera sido un año antes de estas publicaciones.) –

2

Eche un vistazo a Pretty Time. Es una biblioteca para generar secuencias de tiempo humanamente reabsorbibles a partir de marcas de tiempo como milisegundos.

Cuestiones relacionadas