SimpleDateFormat: transformar milisegundos --> hh:mm:ss

jml_brujula
20 de Diciembre del 2004
Saludos,

Tengo un pequeño problema con un formateo de tiempo. Tengo un long que vale 6.000.000 de milisegundos, y quiere formatearlo a hh:mm:ss. Según las cuentas que hecho con la calculadora esto equivaldría a 100 minutos, o lo que es lo mismo, 01:40:00, en el formato que yo desearía, pero siempre, me saca 02:40:00. El código que tengo es:

SimpleDateFormat sdf = new SimpleDateFormat ("hh:mm:ss");
long tiempoRestante = 6.000.000; // Este valor se saca de BBDD
Date tiempoRestanteDate = new Date(tiempoRestante);
String tiempoRestanteString = sdf.format(tiempoRestanteDate);

Al imprimir la variable tiempoRestanteString aparece el valor: 02:40:00. He probado con todos los patterns posibles (hh:mm:ss, HH:mm:ss, kk:mm:ss, KK:mm:ss, pero en todos obtengo el mismo resultado. Alguien puede decirme por qué ocurre esto, o donde me estoy equivocando?

Muchas gracias por vuestra ayuda.

azuluaga
20 de Diciembre del 2004
Hola jml_brujula, una de las cosas más complicadas es contar con determinada cantidad de tiempo.
Cuando usas 6 millones de milisegundos esto quiere decir 1:40 GMT y como España es GMT +1 pues te suma 1 hora a cualquier fecha/hora que obtenga.
Podrías usar una especie de truco para lograr tu objetivo:

int inOffset = Calendar.getInstance().getTimeZone().getOffset((new java.util.Date()).getTime());
SimpleDateFormat sdf = new SimpleDateFormat ("hh:mm:ss");
long tiempoRestante = 6000000; // Este valor se saca de BBDD
Date tiempoRestanteDate = new Date(tiempoRestante-inOffset);
String tiempoRestanteString = sdf.format(tiempoRestanteDate);
System.out.println(tiempoRestanteString);

Eso es restándole el la diferencia que hay con GMT (aquí en Colombia es -18000000) tiempoRestante.

En www.geocities.com/javacolombia hay dos artículos sobre el uso de fechas en java, seguramente te serán de ayuda.

Saludos.

mauro75
20 de Diciembre del 2004
Quisiera colgarme de esta respuesta para formular una pregunta.

Acá en Chile tenemos el mismo GMT que Colombia, pero estamos en horario de verano asi que se suma 1 hora . Cuando instancio un objeto Date y lo depliego, muestra lo siguiente:

04:19:23 PM

Cuando en realidad debería ser:
05:19:23 PM (Hora Chilena)

¿Como puedo controlar ese pequeño gran detalle?

De antemano Gracias.