Ich versuche, ein Java-Programm auszuführen, aber es wird eine Standard-GMT-Zeitzone anstelle einer vom Betriebssystem definierten Zeitzone verwendet. Meine JDK-Version ist 1.5 und das Betriebssystem ist Windows Server Enterprise (2007)
In Windows ist eine zentrale Zeitzone angegeben, aber wenn ich das folgende Programm ausführe, erhalte ich 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 die Zeitzone nicht in der Anwendung festlegen möchte. Ich möchte, dass die von JVM verwendete Zeitzone die im Betriebssystem angegebene ist. (Ich finde diese Probleme nicht bei anderen Servern mit Version 1.4 von JDK und Microsoft Server 2003).
Alle Gedanken wäre sehr dankbar.
DateTest
Klasse an?-Duser.timezone
Wert weitergebenAntworten:
Sie können der JVM diesen Parameter übergeben
Beispielsweise
und das sollte den Trick machen. Das Setzen der Umgebungsvariablen TZ reicht auch unter Linux aus.
quelle
Sie können auch die Standardzeitzone in Ihrem Code festlegen, indem Sie den folgenden Code verwenden.
Zu dir
quelle
Die akzeptierte Antwort oben:
Hat bei mir nicht genau funktioniert. Ich konnte meine Zeitzone nur erfolgreich ändern, wenn ich keine Anführungszeichen für die Parameter hatte:
quelle
Unter Windows 7 und für JDK6 musste ich
-Duser.timezone="Europe/Sofia"
der Systemvariablen JAVA_TOOL_OPTIONS unter " Arbeitsplatz => Eigenschaften => Erweiterte Systemeinstellungen => Umgebungsvariablen" hinzufügen .Wenn Sie bereits eine andere Eigenschaft festgelegt haben,
JAVA_TOOL_OPTIONS
fügen Sie einfach ein Leerzeichen hinzu und fügen Sie dann Ihre Eigenschaftszeichenfolge ein.quelle
Zwei Optionen, von denen ich glaube, dass sie in den anderen Antworten nicht behandelt wurden:
Vermeiden Sie die Notwendigkeit
Was auch immer Sie tun, um die JVM-Standardzeitzone festzulegen, es ist sehr schwierig sicherzustellen, dass niemand anderes sie anders festlegt. Sie kann jederzeit ohne vorherige Ankündigung von einem anderen Teil Ihres Programms oder von einem anderen Programm, das in derselben JVM ausgeführt wird, festgelegt werden. Geben Sie in Ihren Zeitoperationen explizit an, welche Zeitzone Sie möchten, und Sie wissen immer, was Sie unabhängig von der JVM-Einstellung erhalten. Beispiel:
Beispielausgabe:
System.setProperty
Für viele Zwecke wird das Folgende nicht der bevorzugte Weg sein, und es kann sicherlich missbraucht werden. Für "Wegwerf" -Programme finde ich es manchmal praktisch. Sie können eine Systemeigenschaft auch in Java festlegen:
Dies wurde gerade gedruckt:
Wenn Sie eine Validierung der übergebenen Zeichenfolge wünschen, verwenden Sie:
quelle
Wenn Sie Maven verwenden :
quelle
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
für Spring Boot v1.Wenn Sie in win7 die richtige Zeitzone als Parameter in JRE festlegen möchten, müssen Sie die
deployment.properties
im Pfad gespeicherte Datei bearbeitenc:\users\%username%\appdata\locallow\sun\java\deployment
und die Zeichenfolgedeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zone hinzufügenquelle