Cómo convertir los segundos en este formato "HH: mm: ss"

Quiero convertir el segundo / milisegundos en este formato "HH: mm: ss" (para esamples, de 5 segundos a 00:00:05). Traté de obtener ese formato de esta manera:

int millis = 5000; SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); String time = df.format(millis); 

De esa manera, obtengo "01:00:05" y no "00:00:05". ¿Dónde estoy equivocado?

5 Solutions collect form web for “Cómo convertir los segundos en este formato "HH: mm: ss"”

Zonas horarias.

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 es 5 segundos después de la medianoche hora local.

Actualización de Java 8 :

java.time.LocalTime manejará la idea de un reloj de pared "hora del día" sin que tengas que preocuparte por las zonas horarias y los días implícitos en java.util.Date . Si puede utilizar Java 8, y su duración será siempre inferior a un día, entonces 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 mejor modelo de lo que quieres, ya que representa un cierto número de segundos, en lugar de una hora del java.time.Duration es un dolor de formato en hh: mm: Ss, por lo que si siempre se trata de valores sub-24hour, TimeOfDay le ofrece este formato de forma gratuita y es equivalente.)


Si está atascado con Java 7 o inferior, a continuación, especificar explícitamente una zona horaria de GMT en su código de ejemplo debe darle la salida que espera.

Esta es una sesión de Scala REPL que demuestra el problema y la solución 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 = java.text.SimpleDateFormat@8140d380 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í que usted puede ver que mi zona horaria predeterminada es GB , que tiene una compensación de 1 hora de GMT en el momento denotado por 5000L . Ajustar el huso horario a GMT gievs la salida esperada de 00:00:05 .

Tengo esto para trabajar. Avísame si funciona para ti. Parece un montón de líneas para hacer algo aparentemente simple.

  int millis = 5000; TimeZone tz = TimeZone.getTimeZone("UTC"); SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); df.setTimeZone(tz); String time = df.format(new Date(millis)); System.out.println(time); 

Debería obtener SimpleDateFormat con el argumento Locale.

 public static String getDateFromMillis(long millis) { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); return formatter.format(new Date(millis)); } 
 public class HHMMSS { final int UUR = 3600; final int MINUUT = 60; public void converteerTijd() { int uren, minuten, seconden, ingave; System.out.print("Geef een aantal seconden: "); ingave = Input.readInt(); uren = ingave / UUR; minuten = (ingave - uren * UUR) / MINUUT; seconden = ingave - uren * UUR - minuten * MINUUT; String nU1 = (uren < 10) ? "0" : ""; String nM1 = (minuten < 10) ? "0" : ""; String nS1 = (seconden < 10) ? "0" : ""; System.out.println(nU1 + uren + "-" + nM1 + minuten + "-" + nS1 + seconden); 

Java 9 respuesta:

  Duration dur = Duration.ofMillis(millis); System.out.println(String.format("%02d:%02d:%02d", dur.toHours(), dur.toMinutesPart(), dur.toSecondsPart())); 

(No probado todavía)

Los métodos toXxPart se describen en los documentos de la API para Java 9 .

  • ¿Es Android usando NTP para sincronizar el tiempo?
  • GPS: Cómo funciona la inyección de tiempo NTP
  • Tiempo de volver a Android
  • Cómo obtener sellos horarios precisos desde la ubicación GPS de Android
  • ¿Hay una manera de detectar cuando el usuario ha cambiado la hora del reloj en su dispositivo?
  • Fuente confiable de tiempo para el applet JavaCard en SIM
  • ¿Cómo hacer que el código se detenga por un par de segundos en android?
  • ¿Qué es T en YYYYMMDDTHHMMSS?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.