Foros del Web » Programación para mayores de 30 ;) » Java »

Formateo especial para las horas

Estas en el tema de Formateo especial para las horas en el foro de Java en Foros del Web. A ver si alguien me puede ayudar, necesito una función en JAVA, que convierte un valor en segundos, como este, 19805, en formato como este ...
  #1 (permalink)  
Antiguo 17/09/2009, 14:08
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Formateo especial para las horas

A ver si alguien me puede ayudar, necesito una función en JAVA, que convierte un valor en segundos, como este, 19805, en formato como este 5h 30m 5s.

Alguien me puede decir como ?
  #2 (permalink)  
Antiguo 17/09/2009, 22:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Formateo especial para las horas

Hola,

Posiblemente:

Código Java:
Ver original
  1. long l = (new java.util.Date()).getTime();
  2. System.out.println(String.format("%1$tH:%1$tM:%1$tS", l));
Saludos,
  #3 (permalink)  
Antiguo 17/09/2009, 22:58
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Muchas gracias, creo que para lo que necesito tendría que dejarlo de esta forma : System.out.println(String.format("%1$tHh %1$tMm %1$tSs", l));
De esta forma me lo muestra en formato 6h 56m 5s
  #4 (permalink)  
Antiguo 17/09/2009, 23:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Perdona, pero he estado probando y no me funciona del todo.

Te explico, desde una API concreta, me devuelve en segundos un tiempo, por ejemplo 8h, me lo devuelve un long con este valor : 28800.

Yo necesito recuperar este valor y poder pintar en el formato especial que salga para este caso 8h. Si fuera el caso que el valor long es 30600, quiere decir que son 8h 30m.
  #5 (permalink)  
Antiguo 17/09/2009, 23:15
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Perdona, pero he estado probando y no me funciona del todo.

Te explico, desde una API concreta, me devuelve en segundos un tiempo, por ejemplo 8h, me lo devuelve un long con este valor : 28800.

Yo necesito recuperar este valor y poder pintar en el formato especial que salga para este caso 8h. Si fuera el caso que el valor long es 30600, quiere decir que son 8h 30m.
  #6 (permalink)  
Antiguo 17/09/2009, 23:27
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Formateo especial para las horas

Ooops !

Tienes razón, no leí correctamente lo de h-m-s. Aún así tenía duda que significa '19805'. Si fuera una cantidad de segundos transcurridos desde media noche, tendrías un problema con el TimeZone diferente que GMT+0.

En ese caso tendrías que aplicar algo mas complejo como por ejemplo:

Código Java:
Ver original
  1. long seg = 28800 * 1000;
  2.     java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH'h' mm'm' ss's'");
  3.     sdf.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
  4.     System.out.println(sdf.format(seg));
Saludos,
  #7 (permalink)  
Antiguo 17/09/2009, 23:38
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Gracias HackmanC, creo que esto es lo que necesito, es que llevo unas horitas con este tema y de otros, a veces con mentes frescas pues ayuda fácilmente.

Lo he probado con el ejemplo que puse de 19805, e efectivamente devuelve lo que necesito : 05h 30m 05s

En el ejemplo de de 28800, devuelve 08h 00m 00s

Ahora, y perdona por las molestias, si por ejemplo los segundos son 00 como en este caso, que se muestre 08h 00m, y si los minutos son 00m, pues que solamente se muestre 8h.

Muchas gracias me salvas la vida laboralmente hablando
  #8 (permalink)  
Antiguo 18/09/2009, 00:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Formateo especial para las horas

Hola,

No sé si exista alguna forma para que Formatter se 'salte' alguna opción si esta es 0. Pero podrías implementar una validación previa, por ejemplo:

Código Java:
Ver original
  1. public class Time {
  2.  
  3.   public static void main(String[] args) {
  4.     Time t = new Time();
  5.   }
  6.  
  7.   public Time() {
  8.     long l = 28800 * 1000;
  9.     PersonalSimpleDateFormat sdf = new PersonalSimpleDateFormat();
  10.     System.out.println(sdf.format(l));
  11.   }
  12.  
  13.   private class PersonalSimpleDateFormat extends java.text.SimpleDateFormat {
  14.     public final String format(long value) {
  15.       setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
  16.       applyPattern("HH'h' mm'm' ss's'");
  17.       if (value % 3600 == 0) applyPattern("HH'h'"); else
  18.       if (value % 60 == 0) applyPattern("HH'h' mm'm'");
  19.       return super.format(value);
  20.     }
  21.   }
  22. }

Saludos.
  #9 (permalink)  
Antiguo 18/09/2009, 00:28
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Estoy utilizando en un principio la primera opcion :

long seg = 28800 * 1000;
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH'h' mm'm' ss's'");
sdf.setTimeZone(java.util.TimeZone.getTimeZone("GM T"));
System.out.println(sdf.format(seg));

Poniendo este método :

private String generateDateToString(){
long seg = 28800 * 1000;
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH'h' mm'm' ss's'");
sdf.setTimeZone(java.util.TimeZone.getTimeZone("GM T"));
System.out.println(sdf.format(seg));

}

Y donde marco en negrita muesta un error :

The method format(Date) in the type DateFormat is not applicable for the arguments (long)

Que puede ser?
  #10 (permalink)  
Antiguo 18/09/2009, 00:52
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Formateo especial para las horas

¿Para cual versión de VM estás compilando?

Posiblemente:
Si estás usando una versión anterior a la 1.5 es posible que no exista 'java.text.Format.format(Object o)' y entonces intenta usar 'java.text.DateFormat.format(Date d)' ... creo
Y allí se complica todo porque tienes que buscar otra solución.

Saludos,
  #11 (permalink)  
Antiguo 18/09/2009, 01:02
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Formateo especial para las horas

Correcto, pasaba lo que comentas, tenía puesta el eclipse para compilar la version 1.4, la he cambiado a la 1.5 y funciona correctamente.

Gracias de nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:36.