En primer lugar cabe destacar que el mundo tiene diferentes usos horarios.. todo parte del GMT-00 y luego se va moviendo para la derecha o para la izquierda restando o incremetando horas.
Es decir el GMT-00 que si no me equivoco seria londres, tiene una determinada hora supongamos en con las 6 pm.
en caso de movernos para el Oeste osea para Argentina por ejemplo ese gmt se va a ir restando es decir...
Argentina tiene un GMT-03 osea que se restarian 3 horas a el gmt-00 por lo cual si en el gmt-00 son las 6 pm, en argentina serian las 3 pm.
Llendo a lo relativo a JAVA.
la maquina virtual de java tiene seteada tambien una hora con su respectivo uso horario, que siempre toma la del sistema.
Osea si tenemos seteado el windows o linux, en argentina con una determinada hora y el huso horario america/buenos aires, vamos a tener seteada por defecto a la maquina virtual en gmt-03.
Entonces que pasa si estoy trabajando con una aplicacion, con la cual yo necesito manejarme con un uso horario distinto?
Por ejemplo quiero guardar en la BD siempre en GMT-0, porque se que despues esa BD va a ser accedida de distntos paises, que luego van a hacer las conversiones necesarias para pasar ese horario a su GMT correspondiente segun el pais.
Bueno en ese caso, entra en juego la clase de java TIMEZONE.
Que se usa de la siguiente manera.
//vamos a crear el timezone que queramos, en este caso queremos un timezone 00
TimeZone tz = TimeZone.getTimeZone("GMT-00");
//Voy a crear un objeto Calendar para poder manejar las fechas con un calendario y a este
//calendar en particular le voy a setear el timezone creado antes con gmt-0
Calendar cal = Calendar.getInstance(tz);
Bien hata aca todo barbaro, pero lo que nos fataria ahora seria formatear o representar
el horario de nuestra hora en gmt-00
Para eso hacemos lo siguiente.
// Obtengo un objeto DateFormat y le seteo tambien el gmt-0
DateFormat formater = DateFormat.getDateTimeInstance();
formater.setTimeZone(TimeZone.getTimeZone("GMT-0"));
Ya etamos en condiciones de imprimir la hora y fecha en gmt-0 o guardarla en la BD:
Imprimir:
System.out.println(formater.format( cal.getTime() );
Guardarlo en la BD
guardar(new Date( formater.format( cal.getTime())));
Una vez tuve un problema para guardar en la BD con el :
guardar(new Date( formater.format( cal.getTime())));
No se si sera porque el new Date esta deprecated o que, pero por las dudas para solucionar eso, se puede crear otro formater, y decirle en que formato se quiere la fecha ej:
SimpleDateFormat formater2 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
y despues en vez de poner esta linea:
guardar(new Date( formater.format( cal.getTime())));
utilizo esta:
guardar(formater2.parse( formater.format( cal.getTime())));
Bueno espero que se haya entendido!
Genial Gracias :D
ResponderEliminar