2010-03-22 9 views
96

Ich versuche, ein Java-Programm auszuführen, aber es nimmt eine Standard-GMT-Zeitzone statt einer OS-definierten Zeitzone. Meine JDK-Version ist 1.5 und das Betriebssystem ist Windows Server Enterprise (2007)Wie man eine JVM TimeZone richtig einstellt

Windows hat eine zentrale Zeitzone angegeben, aber wenn ich das folgende Programm ausführen, gibt es mir eine GMT-Zeit.

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()); 
    } 
} 

Hier ist die Ausgabe

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

Bitte beachten Sie, dass ich will nicht die Zeitzone von der Anwendung eingestellt werden. Ich möchte, dass die von JVM verwendete Zeitzone die im Betriebssystem angegebene ist. (Dieses Problem tritt bei anderen Servern mit der Version 1.4 von JDK und Microsoft Server 2003 nicht auf.)

Alle Gedanken würden sehr geschätzt werden.

+1

Hm, das ist seltsam. Sieht aus wie ein JVM/OS-Bug oder eine seltsame Fehlkonfiguration. –

+0

Wie rufen Sie die Klasse "DateTest" auf? –

+0

@matt b: Ich kompiliere und rufe DateTest von Windows Eingabeaufforderung. Aber das ist nur eine Testklasse. Das ursprüngliche Problem war mit einem ETL-Prozess für IBM Cognos-Server. –

Antwort

155

Sie können die JVM dieses param

-Duser.timezone 

Zum Beispiel

-Duser.timezone=Europe/Sofia 

und dies sollte den Trick tun passieren. Das Setzen der Umgebungsvariablen TZ funktioniert auch unter Linux.

+0

Wir mussten das JDK-Zeitzonen-Update-Tool - 1.3.25 (tzupdater) verwenden und dann die JVM ändern Parameter, wie Sie vorgeschlagen haben, und wir haben das Problem endgültig gelöst. Übrigens wird die Zeitzone Informationen von Windows in einigen Registrierung gespeichert. Der Aktualisierer, den ich verwendete, aktualisierte auch die Registrierungswerte. –

+1

Ich versuche, meine JVM mit diesem Parameter zu starten, scheint aber keine Änderung zu haben ... Wenn ich auf UTC starten möchte, was soll ich als Parameter verwenden? –

+4

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

21

Die akzeptierte Antwort oben:

-Duser.timezone="Europe/Sofia" 

nicht für mich genau arbeiten. Ich war nur in der Lage, erfolgreich meine Zeitzone zu ändern, wenn ich keine Anführungszeichen um die Parameter hatte:

-Duser.timezone=Europe/Sofia 
+2

Ich stimme zu. Ich habe die ursprüngliche Antwort bearbeitet, um die Zitate zu entfernen. – GaZ

0

In win7, wenn Sie die richtige Zeitzone als Parameter in JRE festlegen möchten, müssen Sie die Datei bearbeiten deployment.properties in Pfad gespeichert c:\users\%username%\appdata\locallow\sun\java\deployment die Zeichenfolge deployment.javaws.jre.1.args=-Duser.timezone\=my_time_zone

+0

Ich habe es versucht und es funktioniert nicht (jvm von innerhalb intellij ausgeführt) – kumetix

+0

@Dave überhaupt nicht funktioniert .... –

9

unter Windows 7 und für JDK6 Zugabe hatte ich -Duser.timezone="Europe/Sofia" zum JAVA_TOOL_OPTIONS Systemvariable unter „Mein Computer befindet hinzufügen => Eigenschaften => Erweiterte Systemeinstellungen => Umgebungsvariablen ".

Wenn Sie bereits eine andere Eigenschaft für JAVA_TOOL_OPTIONS festgelegt haben, fügen Sie einfach ein Leerzeichen ein und fügen Sie dann Ihre Eigenschaftszeichenfolge ein.

2

Wenn Sie Maven verwenden:

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

Sie können auch die Standardzeitzone in Ihrem Code festgelegt durch folgenden Code verwenden.

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

zu Ihrem

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

"Bitte beachten Sie, dass ich nicht die Zeitzone von der Anwendung einstellen möchte." – AbVog

Verwandte Themen