En cierto proyecto en el que estoy involucrado tuve que convertir algunas fechas en el huso horario UTC (GMT) a la zona horaria CST (Tiempo del centro) que es el que usa la mayoría de los estados en México. Como el proyecto está enteramente basado en tecnología Java, me di a la tarea de encontrar formas de hacer esto con librerías para Java.
Encontré que hay algunas librerías, como las de Quartz, implementan alguna clase para la conversión de zonas horarias. Pero en mi caso, necesitaba no depender tanto de librerías de terceros o fuera del API de Java.
Encontré que con las clases TimeZone y DateFormat puedo hacer la conversión usando las siguientes sentencias.
public void cambiarZonaHoraria(Date fecha, String to) {
DateFormat dateFormat = new SimpleDateFormat();
TimeZone tz = TimeZone.getTimeZone(to);
dateFormat .setTimeZone(tz);
System.out.println(dateFormat.format(fecha));
}
Lo que se hace básicamente es
De la misma forma se pueden hacer conversiones entre distintos husos y zonas horarias.
Ahora, cabe señalar que para crear un TimeZone se usa el nombre corto de la zona horaria. Aquí dejo un listado de zonas horarias con sus nombres e IDs que he obtenido ejecutando este pequeño programa que encontré en Java Developers Almanac:import java.util.Date;
import java.util.TimeZone;
public class ListadoZonasHorarias {
public static void main( String[] args ) {
Date fecha = new Date();
// Obtiene el ID de todas las zonas horarias
String[] zoneIds = TimeZone.getAvailableIDs();
System.out.println(" ID | Nombre corto | Nombre largo |Diferencia horaria \n");
for (int i=0; i<zoneIds.length; i++) {
// Ontiene el TimeZone dependiendo del ID e imprime el ID
TimeZone tz = TimeZone.getTimeZone(zoneIds[i]);
System.out.print(tz.getID() + "\t|");
// Obtiene e imprime el nombre corto y largo de la zona horaria
String shortName = tz.getDisplayName(tz.inDaylightTime(fecha), TimeZone.SHORT);
String longName = tz.getDisplayName(tz.inDaylightTime(fecha), TimeZone.LONG);
System.out.print(shortName + "\t\t|");
System.out.print(longName + "\t|");
// Obtiene e imprime la cantidad de horas de diferencia al huso GMT
int ro = tz.getRawOffset();
int horas = ro / (60*60*1000);
int minutos = Math.abs(ro / (60*1000)) % 60;
System.out.print(horas + ":" + minutos);
System.out.println();
}
}
}
Convirtiendo fechas entre zonas horarias
domingo, 6 de diciembre de 2009Publicado por Jesfre en 10:08
Etiquetas: java, programación
Suscribirse a:
Enviar comentarios (Atom)
0 comentarios:
Publicar un comentario