Come impostare correttamente un TimeZone JVM

Sto cercando di eseguire un programma Java, ma sta prendendo un fuso orario GMT predefinito invece che un fuso orario definito dal sistema operativo. La mia versione JDK è 1.5 e il sistema operativo è Windows Server Enterprise (2007)

Windows ha un fuso orario centrale specificato, ma quando eseguo il seguente programma, mi dà un orario 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()); } } 

Ecco l’output

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

Si prega di notare che non voglio impostare il fuso orario dall’applicazione. Voglio che il fuso orario utilizzato da JVM sia quello specificato nel sistema operativo. (Non trovo questo problema con altri server che hanno la versione 1.4 di JDK e Microsoft Server 2003).

Qualsiasi pensiero sarebbe molto apprezzato.

È ansible passare la JVM a questo parametro

 -Duser.timezone 

Per esempio

 -Duser.timezone=Europe/Sofia 

e questo dovrebbe fare il trucco. L’impostazione della variabile di ambiente TZ fa anche il trucco su Linux.

Puoi anche impostare il fuso orario predefinito nel tuo codice usando il seguente codice.

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

Per il tuo

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

La risposta accettata sopra:

 -Duser.timezone="Europe/Sofia" 

Non ha funzionato esattamente per me. Sono riuscito a cambiare il fuso orario con successo solo quando non avevo virgolette intorno ai parametri:

 -Duser.timezone=Europe/Sofia 

Su Windows 7 e per JDK6, ho dovuto aggiungere -Duser.timezone="Europe/Sofia" alla variabile di sistema JAVA_TOOL_OPTIONS che si trova in “My computer => Properties => Advanced System Settings => Variabili d’ambiente”.

Se hai già altre proprietà impostate per JAVA_TOOL_OPTIONS aggiungi uno spazio e inserisci la stringa di proprietà.

Se stai usando Maven :

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

In win7, se si desidera impostare il fuso orario corretto come parametro in JRE, è necessario modificare il file deployment.properties memorizzato nel percorso c:\users\%username%\appdata\locallow\sun\java\deployment aggiungendo la stringa deployment.javaws.jre.1.args=-Duser.timezone\= my_time_zone