Cambios de hora, un cuento de no acabar.

En Chile no sólo tenemos cambios horarios de invierno y verano. También cambiamos la fecha cada año.

La Unión Europea quiere acabar con el cambio de hora, así que los países deben definir cuál será su horario definitivo.

En nuestro país (Chile) cuesta ponerse de acuerdo, incluso para determinar qué hora es, cada año se define si habrá o no cambio de hora, y en el caso que lo haya, cada vez es un día distinto (Mayo? no.. mejor este año hagámoslo en abril y veamos qué pasa). Por eso es necesario revisar cada año si se actualizó el tzdata de los servidores o actualizarlo a mano.

Ni hablar de los smartphones. Ni idea por qué no tienen ese paquete actualizable vía Play Store (por lo menos los Android).

El camino fácil.

En fin. En un Linux actualizado basta con actualizar desde los repositorios de cada distribución, vía yum, apt-get, pacman, etc.

Adicionalmente desde Oracle hay que bajar un paquete llamado *tzupdater *que hará el cambio a nivel de la JVM.

java -jar tzupdater.jar -u

Adicionalmente con el parámetro -V puedes ver cuál versión tienes instalada.

¿Cómo saber si mi distro está actualizada? Puedes revisar con el siguiente comando donde YYYY es el año actual.

/usr/sbin/zdump -v /etc/localtime |grep YYYY

Cuando las cosas no salen a la primera

En distribuciones legacy (o sea, que ya es demasiado tarde para actualizar, cosa típica de las organizaciones del estado), hay que bajar el paquete de base de datos de timezone desde iana, luego descomprimir los archivos en alguna carpeta temporal (ojo que los archivos vienen sueltos en el tgz) y ejecutar los siguientes comandos dependiendo de la zona geográfica donde estés. En mi caso:

zic southamerica

zic backward

En esta vida hay muchas cosas que no funcionan a la primera. Por ejemplo, me tocó el caso de un server que por algún motivo no quería actualizar, tuve que hacer un enlace dinámico de la siguiente forma:

ln -s /usr/share/zoneinfo/Chile/Continental /etc/localtime

Pero son excepciones, también me tocó una aplicación que tenía el timezone escrito en duro. No es que odie a los desarrolladores, pero algunos merecen ser ridiculizados en público.

En fin, la vida sería mucho más fácil si por ley se definiera una zona horaria y que la mantuvieran así todo el año. Los malos ratos, y cagarse el reloj biológico dos veces al año no valen tanto la pena.

Somos buenos copiando ideas de otros países, estaría bien que copiáramos la hora permanente. Pero permanente en serio.

Update: si tienes un error en java 1.8 usando tzupdater, hay una versión de tzdata más conservadora y compatible llamada "rearguard".