Próbuję uruchomić program Java, ale używa on domyślnej strefy czasowej GMT zamiast strefy czasowej zdefiniowanej przez system operacyjny. Moja wersja JDK to 1.5, a system operacyjny to Windows Server Enterprise (2007)
Windows ma określoną centralną strefę czasową, ale kiedy uruchamiam następujący program, podaje mi czas 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());
}
}
Oto wynik
sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010
Pamiętaj, że nie chcę ustawiać strefy czasowej z poziomu aplikacji. Chcę, aby strefa czasowa używana przez maszynę JVM była określona w systemie operacyjnym. (Nie znajduję tego problemu na innych serwerach, które mają wersję 1.4 JDK i Microsoft Server 2003).
Wszelkie myśli byłyby bardzo mile widziane.
DateTest
zajęcia?-Duser.timezone
wartośćOdpowiedzi:
Możesz przekazać JVM ten parametr
Na przykład
i to powinno załatwić sprawę. Ustawienie zmiennej środowiskowej TZ również załatwia sprawę w systemie Linux.
źródło
Możesz również ustawić domyślną strefę czasową w swoim kodzie, używając następującego kodu.
Do Twojego
źródło
Przyjęta odpowiedź powyżej:
Nie działało dla mnie dokładnie. Mogłem pomyślnie zmienić strefę czasową tylko wtedy, gdy nie miałem cudzysłowów wokół parametrów:
źródło
W systemie Windows 7 i JDK6 musiałem dodać
-Duser.timezone="Europe/Sofia"
do JAVA_TOOL_OPTIONS zmiennej systemowej znajdującej się w „Mój komputer => Właściwości => Zaawansowane ustawienia systemu => Zmienne środowiskowe”.Jeśli masz już ustawioną inną właściwość,
JAVA_TOOL_OPTIONS
wystarczy dołączyć spację, a następnie wstawić ciąg znaków właściwości.źródło
Dwie opcje, których nie sądzę, zostały uwzględnione w innych odpowiedziach:
Unikaj potrzeby
Cokolwiek robisz, aby ustawić domyślną strefę czasową maszyny JVM, bardzo trudno jest się upewnić, że nikt inny nie ustawi jej inaczej. Można go ustawić w dowolnym momencie bez powiadomienia z innej części programu lub innego programu działającego w tej samej JVM. Tak więc w operacjach czasowych jasno określ, którą strefę czasową chcesz, a zawsze będziesz wiedział, co otrzymujesz, niezależnie od ustawienia JVM. Przykład:
Przykładowe dane wyjściowe:
System.setProperty
Z wielu powodów poniższy sposób nie będzie preferowany iz pewnością można go nadużyć. W przypadku programów „do wyrzucenia” czasami wydaje mi się to praktyczne. Możesz również ustawić właściwość systemową z poziomu Java:
To właśnie zostało wydrukowane:
Jeśli chcesz sprawdzić poprawność przekazywanego ciągu, użyj:
źródło
Jeśli używasz Maven :
źródło
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
dla Spring Boot v1.W win7, jeśli chcesz ustawić odpowiednią strefę czasową jako parametr w JRE, musisz edytować plik
deployment.properties
przechowywany w ścieżcec:\users\%username%\appdata\locallow\sun\java\deployment
dodając ciągdeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zoneźródło