Timezones.
El valor largo 5000
significa 5 segundos después de la época. Para la mayoría de las zonas horarias, 5 segundos después de la época no son 5 segundos después de la medianoche, hora local.
Java 8 actualización:
java.time.LocalTime
se encargará de la idea de un reloj de pared "hora del día", sin tener que preocuparse acerca de las zonas horarias y días implícitos en java.util.Date
. Si puede usar Java 8, y sus duraciones siempre será menos de un día, a continuación, una versión correcta de su ejemplo puede ser tan simple como:
int millis = 5000;
int seconds = millis/1000; // Maybe no need to divide if the input is in seconds
LocalTime timeOfDay = LocalTime.ofSecondOfDay(seconds);
String time = timeOfDay.toString();
(supongo que en sentido estricto, java.time.Duration
es un modelo mejor de lo que desea, ya que representa una cierta cantidad de segundos, en lugar de una hora del día. Pero es un dolor formatear en hh: mm: ss, por lo que si siempre se trata de valores inferiores a 24 horas , TimeOfDay le da este formato de forma gratuita y es por lo demás equivalentes.)
Si está atrapado con Java 7 o menos, luego, especificar explícitamente una zona horaria de GMT
en su código de ejemplo debería darle el resultado que espera.
Aquí hay una sesión Scala REPL demostrar el problema, y la solución de Java 7, en mi máquina:
scala> val millis = 5000
millis: Int = 5000
scala> val df = new java.text.SimpleDateFormat("HH:mm:ss")
df: java.text.SimpleDateFormat = [email protected]
scala> df.format(millis)
res0: java.lang.String = 01:00:05
scala> df.getTimeZone.getID
res1: java.lang.String = GB
scala> df.getTimeZone.getOffset(millis)
res2: Int = 3600000
scala> df.setTimeZone(java.util.TimeZone.getTimeZone("GMT"))
scala> df.format(millis)
res3: java.lang.String = 00:00:05
Así se puede ver que mi zona horaria predeterminada es GB
, que tiene un desplazamiento con respecto a GMT a 1 hora el tiempo indicado por 5000L
. Al establecer la zona horaria en GMT, se obtiene el resultado esperado de 00:00:05
.
posible duplicado de [¿Cómo convertir milisegundos a "X minutos, x segundos" en Java?] (Http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x- seconds-in-java) –
Esta pregunta tiene mejores respuestas [aquí] (http://stackoverflow.com/a/625624/685806) y [aquí] (http://stackoverflow.com/a/266970/685806). – Pino
posible duplicado de [Cómo convertir el tiempo en segundos a HH: formato MM: SS en MySQL?] (Http://stackoverflow.com/questions/18911455/how-to-convert-time-in-seconds-to-hhmmss -format-in-mysql) –