Actualizar información de zona horaria en Java

A nuestras queridas autoridades del Gobierno de Chile se les ocurrió que era muy aburrido mantener una zona horaria durante todo el año en Chile, por lo que decidieron una vez más jugar con el reloj. Este hecho ha sido reconocido internacionalmente, lo que obviamente nos llena de orgullo .

Bromas aparte, el tema es bastante complejo para los que administramos sistemas y servidores. En particular, las aplicaciones Java en Linux (y supongo que en Windows también) tienen la desagradable costumbre de no tomar en cuenta la información de zona horaria provista por el sistema, sino que utilizan su propia base de datos de tzdata. Peor aún: a día de hoy, la última actualización de Oracle Java (8u91) no incorpora la información del cambio de hora en Chile. Y la herramienta tzupdater que Oracle provee para actualizar esta información dentro de Java no ha sido actualizada desde el 2015. Como resultado, es probable que hoy muchas aplicaciones Java en Chile estén "dando la hora".

Afortunadamente, es posible indicarle a tzupdater que descargue la información de zonas horarias directamente desde IANA y la guarde en la base de datos interna de Java, con lo que podremos asegurarnos de que esté completamente actualizada. El procedimiento es el siguiente:

  1. Descargar la herramienta tzupdater desde http://www.oracle.com/technetwork/java/javase/downloads/index.html (sección "Java Time Zone Updater Tool") y descomprimirla (unzip tzupdater.zip).
  2. Ingresar al directorio recién creado (cd tzupdater-*).
  3. Ejecutar (como root o con sudo): java -jar tzupdater.jar -l http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz

Luego se deben reiniciar las aplicaciones Java para que el cambio se vea reflejado en ellas.

Para verificar que Java está correctamente actualizado, se puede crear este simple programa que imprime la hora por consola (extraído de StackOverflow):

import java.util.Date;
public class Dte {

    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date.toString());
    }
}

Guárdalo en un archivo llamado Dte.java, y luego compílalo y ejecútalo de esta manera:

javac Dte.java
java Dte

El resultado debería ser similar a lo que se ve en esta imagen:
Referencia: http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html

Comentarios

DeyaAbarzua dijo…
Estimado Christian González , me presento. Me llamo Deyanira Abarzúa y soy estudiante de Adm Pública de 5to año de la universidad de Chile. He hecho averiguaciones y tengo entendido que fue parte del equipo a cargo de Edulinux, y necesito comunicarme contigo para realizarte una entrevista en el marco de mi seminario de investigación “Software libre en el sistema público. La experiencia de Edulinux en Chile y las dificultades para su implementación” en donde se intenta vislubrar las principales dificultades en la implementación de este sofware en el sistema público, pero por sobre todo, las dificultades que hubieron, tanto técnicas como políticas para realiza y escuchar tus proyecciones, como persona que entiende del tema, para una implementación completa de este sistema como las experiencias de otros países latinoamericanos y del mundo en general.

Te dejo mi correo electronico para cualquier cosa abarzuadeyanira@gmail.com espero que podamos coordinar alguna entrevista. ¡Muchos saludos!
DeyaAbarzua: te escribí un correo para ponernos en contacto.

Entradas más populares de este blog

Replicando el funcionamiento de "Antorcha" con herramientas públicamente disponibles

Una nueva amiga: Ibanez Artcore AFS75T