programing

JVM 타임존을 올바르게 설정하는 방법

randomtip 2022. 11. 2. 22:53
반응형

JVM 타임존을 올바르게 설정하는 방법

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

Windows 에는 Central 타임 존이 지정되어 있습니다만, 다음의 프로그램을 실행하면 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 ....."

설정TZ도 있어야 .

::export TZ=Asia/Shanghai

win7의 JRE를 .deployment.properties " "에 "c:\users\%username%\appdata\locallow\sun\java\deployment 추가, " " "deployment.javaws.jre.1.args=-Duser.timezone\=my_time_zone

언급URL : https://stackoverflow.com/questions/2493749/how-to-set-a-jvm-timezone-properly

반응형