Get it on Google Play

Formación JavaEE: Desarrollo de aplicaciones usando diferentes zonas horarias.

30-05-2017
 
JavaEE TimeZone

JavaEE TimeZone

Cada vez es mas habitual trabajar en proyectos que se utilizan en diferentes zonas horarias y ya en pasados posts hemos hablado de como crear aplicaciones que trabajen con distintos tipos de moneda(Online) y multiidioma pero todavía no habíamos hablado de los cambios horarios.

Productos como Liferay, trabajan internamente solamente con GMT y pobre de ti que les cambies la configuración porque puede arder todo. Para Liferay y cualquier aplicación que trabajemos con distintas zonas horarias es importante saber como hacer cambios de hora en JavaEE.

En JavaEE se trabaja normalmente con la classe ‘java.util.Date’ que no contempla la zona horaria. Tenemos también la classe ‘java.util.Calendar’ que si contempla la zona horaria, pero no la conversión entre zonas horarias.

Para trabajar con zonas horarias la primera classe que hay que dominar es ‘java.util.Timezone’ que nos permite trabajar con zonas horarias. Por ejemplo podemos:

/* Obtener la zona horaria de la máquina virtual */
TimeZone default=TimeZone.getDefault();

/* Obtener la zona horaria de, por ejemplo, España(Peninsula) */
TimeZone default=TimeZone.getTimeZone("Europe/Madrid");

/* Obtener un array con todas las zona horarias disponibles */
String[] timeZoneIds=TimeZone.getAvailableIDs();

A partir de aquí, si queremos convertir un objeto java.util.Date(Que contiene fecha y hora) de una zona horaria a otra es muy fácil con la siguiente función:

public static Date convertTimeZone( Date d0, TimeZone tz1, TimeZone tz2 ) {
	Date d=new Date( d0.getTime() );
	d.setTime( d.getTime()-tz1.getOffset(d.getTime()) );
	d.setTime( d.getTime()+tz2.getOffset(d.getTime()) );
	
	return d;
	}

El Objeto TimeZone nos devuelve siempre el offset(Diferencia en milisegundos) respecto a GMT. De esta manera, retiramos la diferencia respecto de la primera zona horaria y le sumamos la diferencia respecto la segunda. Como el método ‘getOffset(‘ tiene en cuenta el momento actual esta solución también tiene en cuenta los cambios de hora entre invierno y verano en algunas zonas del planeta.

Ya veis! Fácil y rápido. Si os ha gustado no os olvidéis de ponerme un comentario, compartir y visitar mi nuevo canal de Youtube https://www.youtube.com/user/acoronadoc.

Leave a Reply

© Albert Coronado Calzada