ver modify check change adjust java linux timezone

modify - timezone java



Java Time Zone está en mal estado (4)

Es una "peculiaridad" en la forma en que la JVM busca el archivo zoneinfo. Ver el Bug ID 6456628 .

La solución más fácil es hacer / etc / localtime un enlace simbólico al archivo de zona correcto. Para la hora del Pacífico, los siguientes comandos deberían funcionar:

# sudo cp /etc/localtime /etc/localtime.dist # sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

No he tenido ningún problema con el enfoque de enlace simbólico.

Editar: se agregó "sudo" a los comandos.

Estoy ejecutando una aplicación Tomcat, y necesito mostrar algunos valores de tiempo. Desafortunadamente, llega el momento de una hora de descanso. Lo analicé y descubrí que mi TimeZone predeterminada se configura en:

sun.util.calendar.ZoneInfo[id="GMT-08:00", offset=-28800000, dstSavings=0, useDaylight=false, transitions=0, lastRule=null]

En lugar de la zona horaria del Pacífico. Esto también se indica cuando trato de imprimir el nombre para mostrar de la zona horaria predeterminada, y aparece "GMT-08: 00", lo que parece indicarme que no está configurado correctamente en la zona horaria del Pacífico de EE. UU. Me estoy ejecutando en Ubuntu Hardy Heron, actualizado de Gutsy Gibbon.

¿Hay algún archivo de configuración que pueda actualizar para decirle al JRE que use Pacific con toda la información asociada al horario de verano? La hora en mi máquina se muestra correctamente, por lo que no parece ser una configuración incorrecta en todo el sistema operativo.

Ok, aquí hay una actualización. Un compañero de trabajo sugirió que actualice JAVA_OPTS en mi / etc / profile para incluir "-Duser.timezone = US / Pacific", que funcionó (también vi CATALINA_OPTS, que también actualicé). En realidad, acabo de exportar el cambio a las variables en lugar de usar el nuevo / etc / profile (un reinicio posterior recogerá los cambios y seré dorado).

Sin embargo, todavía creo que hay una mejor solución ... debería haber una configuración para Java en algún lugar que diga qué zona horaria está usando, o cómo está agarrando la zona horaria. Si alguien conoce este tipo de configuración, sería increíble, pero por ahora esta es una solución decente.

Estoy usando 1.5, y definitivamente es un problema de DST. Como puede ver, la zona horaria está configurada para no usar el horario de verano. Mi creencia es que se establece genéricamente en -8 desplazamiento en lugar de la zona horaria específica del Pacífico. Dado que el desplazamiento genérico -8 no tiene información de ahorro de luz diurna, por supuesto no lo está usando, pero la pregunta es, ¿dónde le digo a Java que use la zona horaria del Pacífico cuando se inicie? NO estoy buscando una solución programática, debería ser una solución de configuración.


Puede ser útil verificar dos veces las reglas de zona horaria que usa su sistema operativo.

/usr/bin/zdump -v /etc/localtime | less

Este archivo debe contener sus reglas de ahorro de luz diurna, como esta para el año 2080:

/etc/localtime Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

Puede comparar esto con las reglas de zona horaria que cree que debería estar usando. Se pueden encontrar en / usr / share / zoneinfo / .


En Ubuntu, no es suficiente cambiar el archivo / etc / localtime. Parece leer el archivo / etc / timezone, también. Es mejor seguir las instrucciones para configurar correctamente la zona horaria. En particular, haz lo siguiente:

$ sudo cp /etc/timezone /etc/timezone.dist $ echo "Australia/Adelaide" | sudo tee /etc/timezone Australia/Adelaide $ sudo dpkg-reconfigure --frontend noninteractive tzdata Current default time zone: ''Australia/Adelaide'' Local time is now: Sat May 8 21:19:24 CST 2010. Universal Time is now: Sat May 8 11:49:24 UTC 2010.

En mi Ubuntu, si / etc / localtime y / etc / timezone son inconsistentes, Java parece leer el huso horario predeterminado de / etc / timezone.


Tuve un problema similar, posiblemente el mismo. Sin embargo, mi servidor tomcat se ejecuta en un cuadro de Windows para que la solución de enlace simbólico no funcione.

Configuré -Duser.timezone=Australia/Sydney en JAVA_OPTS sin embargo, tomcat no reconocería que DST estaba en efecto. Como solución, cambié Australia/Sydney (GMT + 10: 00) a Pacific/Numea (GMT + 11: 00) para que los tiempos se mostraran correctamente. Sin embargo, me encantaría saber la solución real o el error, si corresponde.