2010-03-22 20 views
96

Estoy intentando ejecutar un programa Java, pero está tomando una zona horaria GMT predeterminada en lugar de una zona horaria definida por el sistema operativo. Mi versión JDK es 1.5 y el sistema operativo es Windows Server Enterprise (2007)Cómo establecer correctamente una JVM TimeZone

Windows tiene una zona horaria central especificada, pero cuando ejecuto el siguiente programa, me da una hora GMT.

import java.util.Calendar; 

public class DateTest 
{ 
    public static void main(String[] args) 
    { 
     Calendar now = Calendar.getInstance(); 
     System.out.println(now.getTimeZone()); 
     System.out.println(now.getTime()); 
    } 
} 

Aquí está la salida

sun.util.calendar.ZoneInfo[id="GMT", 
offset=0, 
dstSavings=0, 
useDaylight=false, 
transitions=0, 
lastRule=null] 
Mon Mar 22 13:46:45 GMT 2010 

Tenga en cuenta que no quiero para establecer la zona horaria de la aplicación. Quiero que la zona horaria utilizada por JVM sea la especificada en el sistema operativo. (No encuentro estos problemas con otros servidores que tienen la versión 1.4 de JDK y Microsoft Server 2003).

Cualquier idea sería muy apreciada.

+1

Hm, esto es extraño. Parece una falla de JVM/OS o una extraña configuración incorrecta. –

+0

¿cómo está invocando la clase 'DateTest'? –

+0

@matt b: estoy compilando y llamando a DateTest desde el símbolo del sistema de Windows. Pero esto es solo una clase de prueba. El problema original fue con algún proceso de ETL para el servidor de cognos de IBM. –

Respuesta

155

se puede pasar la JVM este parámetro

-Duser.timezone 

Por ejemplo

-Duser.timezone=Europe/Sofia 

y esto debe hacer el truco. Establecer la variable de entorno TZ también funciona en Linux.

+0

Tuvimos que usar la herramienta de actualización de zona horaria JDK DST - 1.3.25 (tzupdater) y luego cambiar la JVM parámetro como sugirió y finalmente nos libramos del problema. Por cierto, la información de zona horaria es almacenada por Windows en algún registro. El actualizador que utilicé también actualizó los valores de registro. –

+1

Estoy intentando iniciar mi JVM utilizando este parámetro, pero parece que no hay cambios ... Si quiero comenzar con UTC, ¿qué debo usar como parámetro? –

+4

Pruebe java -Duser.timezone = GMT ... –

21

La respuesta aceptada arriba:

-Duser.timezone="Europe/Sofia" 

no funcionó para mí exactamente. Yo sólo era capaz de cambiar mi zona horaria con éxito cuando no tenía comillas alrededor de los parámetros:

-Duser.timezone=Europe/Sofia 
+2

Estoy de acuerdo. He editado la respuesta original para eliminar las comillas. – GaZ

0

En win7, si desea establecer la zona horaria correcta como parámetro en JRE, tiene que editar el archivo deployment.properties almacena en ruta c:\users\%username%\appdata\locallow\sun\java\deployment añadiendo la cadena deployment.javaws.jre.1.args=-Duser.timezone\=my_time_zone

+0

Lo probé y no funciona (jvm ejecutado desde dentro de intellij) – kumetix

+0

@Dave No funciona en absoluto .... –

9

en windows 7 y para JDK6, he tenido que añadir -Duser.timezone="Europe/Sofia" a la variable JAVA_TOOL_OPTIONS sistema que se encuentra en "Mi PC => Propiedades => Configuración avanzada del sistema => variables de entorno ".

Si ya tiene algún otro conjunto de propiedades para JAVA_TOOL_OPTIONS, solo agregue un espacio y luego inserte la cadena de propiedades.

2

Si está utilizando Maven:

mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....." 
31

También puede establecer la zona horaria predeterminada en el código mediante el uso de código siguiente.

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

el suyo

TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia")); 
+0

"Tenga en cuenta que no quiero configurar la zona horaria de la aplicación." – AbVog