Cómo configurar una zona horaria JVM Correctamente


Estoy tratando de 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)

Windows tiene una zona horaria central especificada, pero cuando corro 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 establecer la zona horaria de la aplicación. Quiero que la zona horaria utilizada por JVM sea la especificada en operativo. (No encuentro estos problemas con otros servidores que tienen la versión 1.4 de JDK y Microsoft Server 2003).

Cualquier pensamiento sería muy apreciado.

Author: Shashank Agrawal, 2010-03-22

6 answers

Puede pasar la JVM este param

-Duser.timezone

Por ejemplo

-Duser.timezone=Europe/Sofia

Y esto debería hacer el truco. Establecer la variable de entorno TZ también hace el truco en Linux.

 163
Author: Bozhidar Batsov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-02 18:44:17

También puede establecer la zona horaria predeterminada en su código utilizando el siguiente código.

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

A la Tuya

 TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));
 41
Author: Ali786,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-12 11:23:03

La respuesta aceptada arriba:

-Duser.timezone="Europe/Sofia" 

No funcionó para mí exactamente. Solo pude cambiar mi zona horaria con éxito cuando no tenía comillas alrededor de los parámetros:

-Duser.timezone=Europe/Sofia
 21
Author: WN4yhihiY,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-04 19:31:35

En Windows 7 y para JDK6, tuve que agregar -Duser.timezone="Europe/Sofia" a la variable del sistema JAVA_TOOL_OPTIONS ubicada en "My computer=>Properties=>Advanced System Settings=>Environment Variables".

Si ya tiene alguna otra propiedad establecida para JAVA_TOOL_OPTIONS simplemente agregue un espacio y luego inserte su cadena de propiedad.

 10
Author: VolkanT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 15:20:49

Si está utilizando Maven :

mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."
 2
Author: MichalSv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-19 10:59:11

En win7, si desea establecer la zona horaria correcta como parámetro en JRE, debe editar el archivo deployment.properties almacenado en path c:\users\%username%\appdata\locallow\sun\java\deployment agregando la cadena deployment.javaws.jre.1.args=-Duser.timezone\=my_time_zone

 0
Author: Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-18 11:24:40