Convirtiendo fechas entre zonas horarias (2)

sábado, 12 de diciembre de 2009

En mi anterior post titulado Convirtiendo fechas entre zonas horarias puse un ejemplo de cómo poder convertir una fecha/hora de una zona horaria local a una distinta. Pero trabajando con el mismo proyecto encontré que debía convertir una fecha de la zona horaria UTC a la local, y entonces mi líder técnico me dió una solución sencilla cambiando solo una línea del código de ejemplo del post anterior, justo para hacer lo que necesitaba en ese momento:

En la tarea que estaba realizando leía un archivo de texto con el dato "fecha" como una serie de números: "20090921"+"1230", que representa el 21 de Septiembre de 2009 a las 12:30; por lo que tuve que usar el formato de fecha "yyyyMMddkkmm". Esta fecha que recibía del archivo representaba una fecha/hora en el horario GMT. Y esta hora la debía pasar a mi zona horaria local que es CST o UTC-6 (Tiempo del centro).

public void cambiarZonaHoraria( String fecha, String patron, String tz ) {
SimpleDateFormat format = new SimpleDateFormat( patron );
format.setTimeZone(TimeZone.getTimeZone( tz ));
try {
System.out.println( format.parse( fecha ) );
} catch (ParseException pe) {
pe.printStackTrace();
}
}


Lo que hace es muy sencillo:
  • Primero crea una nueva instancia de SimpleDateFormat con el parámetro "patron" que le dice a la instancia que el texto que se le va a enviar está en ese formato, en mi caso "yyyyMMddkkmm".
  • Luego, lo más importante de lo que intentamos hacer, le asignaremos a nuestro objeto format el TimeZone en el que está la hora que queremos convertir, en mi caso era GMT.
  • Posteriormente, simplemente usamos el método parse(String) para convertir nuestro texto a un Date en la zona horaria local, en mi caso CST; por lo que el resultado final de este ejemplo es que el texto "200909211230" con el formato "yyyyMMddkkmm"lo cual representa "2oo9/09/21 12:30" en GMT pasa a ser "2009/09/21 6:30" en CST ya que son 6 horas menos a la referencia del Tiempo Universal Coordinado o UTC.
Solo debemos recordar cachar las excepciones o hacer un throw de ellas.

0 comentarios: