[java] JVM TimeZone을 올바르게 설정하는 방법

Java 프로그램을 실행하려고하는데 OS 정의 시간대 대신 기본 GMT 시간대를 사용하고 있습니다. JDK 버전은 1.5이고 OS는 Windows Server Enterprise (2007)입니다.

Windows에는 중앙 시간대가 지정되어 있지만 다음 프로그램을 실행하면 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());
    }
}

출력은 다음과 같습니다

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

응용 프로그램에서 시간대를 설정하고 싶지 않습니다. JVM에서 사용하는 시간대가 OS에 지정된 시간대 여야합니다. (JDK 버전 1.4와 Microsoft Server 2003이 설치된 다른 서버에서는이 문제를 찾을 수 없습니다).

어떤 생각이라도 높이 평가할 것입니다.



답변

이 매개 변수로 JVM을 전달할 수 있습니다.

-Duser.timezone

예를 들어

-Duser.timezone=Europe/Sofia

그리고 이것은 트릭을해야합니다. 환경 변수 TZ를 설정하면 Linux에서 트릭을 수행합니다.


답변

다음 코드를 사용하여 코드에서 기본 시간대를 설정할 수도 있습니다.

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

당신에게

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


답변

위의 답변은 다음과 같습니다.

-Duser.timezone="Europe/Sofia" 

나를 위해 정확하게 작동하지 않았습니다. 매개 변수에 따옴표가 없으면 시간대를 성공적으로 변경할 수있었습니다.

-Duser.timezone=Europe/Sofia


답변

Windows 7 및 JDK6의 경우 “내 컴퓨터 => 속성 => 고급 시스템 설정 => 환경 변수” -Duser.timezone="Europe/Sofia"에있는 JAVA_TOOL_OPTIONS 시스템 변수 를 추가 해야했습니다 .

이미 다른 속성이 설정되어 있으면 JAVA_TOOL_OPTIONS공백을 추가하고 속성 문자열을 삽입하십시오.


답변

내가 생각하지 않은 두 가지 옵션은 다른 답변에서 다루었습니다.

필요를 피하십시오

JVM 기본 시간대를 설정하기 위해 무엇을 하든지 다른 사람이 다르게 설정하지 않는 것은 매우 어렵습니다. 프로그램의 다른 부분이나 동일한 JVM에서 실행중인 다른 프로그램의 통지없이 언제든지 설정할 수 있습니다. 따라서 시간대 작업에서 원하는 시간대를 명시하고 JVM 설정과 독립적으로 얻는 것을 항상 알 수 있습니다. 예:

    System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));

출력 예 :

2018-10-11T14 : 59 : 16.742020 + 05 : 00 [아시아 / 두샨베]

System.setProperty

많은 목적을 위해 다음이 바람직한 방법이 아니며 잘못 사용될 수 있습니다. “버려지는”프로그램을 위해 나는 때때로 그것이 실용적이라고 생각합니다. Java 내에서 시스템 특성을 설정할 수도 있습니다.

    System.setProperty("user.timezone", "Australia/Tasmania");
    System.out.println(ZonedDateTime.now());

이것은 방금 인쇄했습니다.

2018-10-11T21 : 03 : 12.218959 + 11 : 00 [오스트레일리아 / 태즈 매니아]

전달하는 문자열의 유효성을 검사하려면 다음을 사용하십시오.

        System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());


답변

Maven 을 사용하는 경우 :

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


답변

win7에서 JRE에서 올바른 시간대를 매개 변수로 설정하려면 deployment.properties경로 my_time_zone을c:\users\%username%\appdata\locallow\sun\java\deployment 추가하여 경로에 저장된 파일을 편집해야합니다.deployment.javaws.jre.1.args=-Duser.timezone\=