lunes, 28 de marzo de 2016

LINUX-JAVA-timezone-aplicar cambios tzdata con utilitario tzupdater

Deacuerdo a la normativa del gobierno de chile, se aplica el horario de invierno desde el segundo sábado de mayo hasta el segundo sábado de agosto.

Para los aplicativos en java es necesario compilar el archivo tzdata que publica la iana.org
tzdata2016c.tar.gz
Para aplicar los cambios en el server es necesario seguir las instrucciones que indica oracle en su sitio web.
http://www.oracle.com/technetwork/java/javase/documentation/tzupdater-readme-136440.html





Deacuerdo con lo publicado, los pasos para compilar el tzdata son:

Obtener los siguientes archivos y utilitarios:

tzdata2016c.tar.gz
tzdata2016c.tar.gz.sha512
tzupdater.jar ver 2.0.3-b01 o superior.
DSTTest.java

Para generar el archivo con la clave sha512, lo hice con ayuda del utilitario presente en ubuntu, sha512sum, de la siguiente forma:
[gcepeda@santorini java]$ sha512sum tzdata2016c.tar.gz
03eab77c8b3176da1dd17d1d9062b151036b01d224f1e4b60f34a2db6899150431f34f4d9f39652648aae3a55326fd6f85d6deefe3f27b36eaed9ef39ed3f53c  tzdata2016c.tar.gz
[gcepeda@santorini java]$ 

También es posible obtener el código sha512 en la siguiente web:
http://hash.online-convert.com/sha512-generator

Se debe subir el archivo tzdata2016c.tar.gz y el sitio entrega la siguiente info

Se debe copiar sólo la primera línea, excluyendo la palabra "hex: "

Una bez obtenido el código de verificación, crear un archivo con el mismo nombre del origina + extensión sha512:

[root@malaya java]# vi /java/tzdata2016c.tar.gz.sha512
03eab77c8b3176da1dd17d1d9062b151036b01d224f1e4b60f34a2db6899150431f34f4d9f39652648aae3a55326fd6f85d6deefe3f27b36eaed9ef39ed3f53c


[root@malaya java]# ls -1
DSTTest.java
tzdata2016c.tar.gz
tzdata2016c.tar.gz.sha512
tzupdater.jar
[root@malaya java]

Ejecutar la compilación del tzdata2016ccon el utilitario tzupdater.

[root@malaya java]# java -jar tzupdater.jar -v -l file:///java/tzdata2016c.tar.gz
java.home: /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre
java.vendor: Sun Microsystems Inc.
java.version: 1.5.0_15
Downloaded file to /tmp/tz.tmp/tzdata.tar.gz
JRE tzdata version: tzdata2014a
tzupdater tool would update with tzdata version: tzdata2016c
Downloaded file to /tmp/tz.tmp/sha512hash
Extracting files... done.
Renaming /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/zi to /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/zi.tzdata2014a
Renaming /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/zi.tzdata2016c to /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/zi
Validating for : tzdata2016c

Verificaciones:
Compilar la clase DSTTest.java 

[root@malaya java]# javac DSTTest.java
[root@malaya java]# ls -ltr
...
-rw-r--r--  1 root root   1668 Apr 22 03:50 DSTTest.class
[root@malaya java]# 


Ejecutar las verificaciones de zona horaria en base a fechas de prueba, tal como en los siguientes ejemplos:


[root@malaya java]# java DSTTest "05/14/2016 00:05 AM"
JRE version : 1.5.0_15
Sat May 14 00:05:00 CLST 2016
TimeZone tested : Chile Summer Time
Your tested time is in daylight-savings time.
[root@malaya java]# java DSTTest "05/15/2016 00:05 AM"
JRE version : 1.5.0_15
Sun May 15 00:05:00 CLT 2016
TimeZone tested : Chile Time
Your tested time is not in daylight-savings time.
[root@malaya java]# 

[root@malaya java]# java DSTTest "08/13/2016 00:05 AM"
JRE version : 1.5.0_15
Sat Aug 13 00:05:00 CLT 2016
TimeZone tested : Chile Time
Your tested time is not in daylight-savings time.
[root@malaya java]# java DSTTest "08/14/2016 00:05 AM"
JRE version : 1.5.0_15
Sun Aug 14 01:05:00 CLST 2016
TimeZone tested : Chile Summer Time
Your tested time is in daylight-savings time.
[root@malaya java]# 

Deacuerdo a las verificaciones, los aplicativos java se encuentran listos para aceptar la nueva configuracción de timezone para este 2016. 

[Actualización]

Obtener la versión del tzdata actualmente instalada en el java. 

Para obtener la versión del tzdata instalada actualmente en el servidor, y así poder conocer los cambios que se encuentran incorporados, es necesario leer adecuadamente el archivo "ZoneInfoMappings" donde se encuentran guardados los cambios aplicados durante la actualización del tzupdater.

Esta información se encuentra detallada en un paper de oracle
Para obtener la ubicación del archivo "ZoneInfoMappings" se reocmienda ubicar el path de java:

~]# which java
/usr/bin/java
~]# ls -ltr /usr/bin/java
lrwxrwxrwx  1 root root 22 May 10  2016 /usr/bin/java -> /etc/alternatives/java
~]# ls -ltr /etc/alternatives/java
lrwxrwxrwx  1 root root 35 May 10  2016 /etc/alternatives/java -> /usr/lib/jvm/jre-1.5.0-sun/bin/java
~]# ls -ltr /usr/lib/jvm/jre-1.5.0-sun/lib/zi/ZoneInfoMappings 
-r--r--r--  1 root root 16981 Apr 22  2016 /usr/lib/jvm/jre-1.5.0-sun/lib/zi/ZoneInfoMappings

El formato del archivo no es legible (ascii).
~]# file /usr/lib/jvm/jre-1.5.0-sun/lib/zi/ZoneInfoMappings 
/usr/lib/jvm/jre-1.5.0-sun/lib/zi/ZoneInfoMappings: data

Por lo que es necesario usar el utilitario od (Octal dump) para extraer la información en forma legible. Sólo se reuiere el encabezado de este archivo.

~]# /usr/bin/od -c -j 11 -N 11 /usr/lib/jvm/jre-1.5.0-sun/lib/zi/ZoneInfoMappings
0000013   t   z   d   a   t   a   2   0   1   6   c
0000026
~]#

Teniendo la certeza de la versión del tzdata actualmente cargado en el servidor, es posible conocer los cambios a través del archivo de configuración (source files) utilizados por el binario para leer la región específica.

Estos archivos de configuración se encuentran dentro del comprimido tzdata.tar.gz




De esta forma para conocer la configuración para Chile, se debe descomprimir y revisar el archivo de configuración

less /home/java/tzdata.2016c/southamerica
...
# From Paul Eggert (2016-03-18):
# For now, assume the pattern holds for the indefinite future.
# The decree says transitions occur at 24:00; in practice this appears
# to mean 24:00 mainland time, not 24:00 local time, so that Easter
# Island is always two hours behind the mainland.
....
# Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
Rule    Chile   2016    max     -       May     Sun>=9  3:00u   0       -
Rule    Chile   2016    max     -       Aug     Sun>=9  4:00u   1:00    S

Para interpretar esta información, existe la documentación oficial que entrega el siguiente cuadro de ayuda:

























Por lo que la información para Chile indica que desde el 2016 en adelante, el segundo domingo del mes de mayo y agosto se agenda el cambio de hora. 

Fuentes

1 comentario:

  1. Hola! Me ayudas con DSTTest.java por favor? No lo pude pillar en ninguna parte. Gracias!

    ResponderEliminar