2013-09-24 3 views
1

동일한 컴퓨터에서 다음 코드 문을 컴파일하고 runned했을 때 두 개의 다른 시간대 값이 나타납니다.JDK 버전 별 시간대 값 변경

public class TimeZoneDemo { 
    public static void main(String args[]){ 

    // create time zone object  
    TimeZone timezone = TimeZone.getDefault(); 

    // checking time zone value  
    System.out.println(timezone); 
    }  
} 

JDK 1.6.35

Tue Sep 24 06:25:03 VET 2013 
sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null] 

JDK 1.7.02

Tue Sep 24 22:56:54 MAGT 2013 
sun.util.calendar.ZoneInfo[id="Asia/Magadan",offset=43200000,dstSavings=0,useDaylight=false,transitions=66,lastRule=null] 

OS : 윈도우 7 64 비트.

+0

어떤 운영 체제에서 어떤 컴퓨터를 사용합니까? (Windows, Mac, Linux, ...) – Joni

+0

컴퓨터에 구성된 실제 위치는 무엇입니까? –

+0

windows 7 64 비트. –

답변

1

시간대는 JDK가 아닌 JVM에 대해 설정됩니다. 다음과 함께 jvm에 대해 이것을 설정합니다 ...

Duser.timezone="Europe/Sofia" 

이 항목을 JVM에 전달하면 버전을 변경할 때 항상 동일한 시간대가 적용됩니다.

오라클 TimeZone.getDefault()documentation 언급 ...

이 호스트의 디폴트의 TimeZone를 가져옵니다. 기본값은 입니다. TimeZone은 구현에 따라 다를 수 있습니다.

+1

'-Duser.timezone'을 JVM 인수로 설정하는 것에 동의합니다.그러나 JVM은 구현/버전이 무엇이든'-Duser.timezone'이 없으면 시스템 시간대를 기본값으로 설정해야합니까? – kotacc

1

다음 표를 보면 JRE 버전에 대한 업데이트가 표시됩니다.

http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html

버전 1.6.35는 버전 1.7.02보다 최신. 그러나 이러한 환경 중 하나가 TZUpdater로 업데이트 된 것은 여전히 ​​가능합니다.

컴퓨터가 어디에 있는지 알면 관련 변경 사항 만 있는지 알 수 있습니다. 나는 비슷한 문제를 발견

+0

새로 포맷 한 다른 컴퓨터에서 동일한 코드 문을 테스트 했으므로 그렇게 생각하지 않습니다. 제대로 작동합니다. –

+0

@ mmc18 : "나는 그렇게 생각하지 않는다"는 것은 무엇을 의미합니까? 내 대답에는 당신이 질문 할 수있는 진술이 포함되어 있지 않습니다. – Holger

+0

TZUpdater는 일광 시간 값이 있거나 시간이 변경되면 실행됩니다. 내가 관심있는 위치가 바뀌 었다고 확신합니다. 나는 JVM에 버그가 있다고 생각한다. –

0

이러한 문제는, 왕래의 현재 버전과 합리적인 솔루션으로 해결. 자세한 내용은 여기를 참조하십시오 : Java incorrect time zone bug on Windows

편집 : 앤드류 아놀드 응답 : 간단히 말해서, 자바 런타임이 제대로 컴퓨터의 현재 시간대를 찾는 일을하고 힘든 시간을 가지고있다.

표준 시간대의 Windows 레지스트리 정보는 신뢰할 수 없으며 msvcrt.dll 및 다양한 msvcrxx.dll을 사용하는 기본 Windows API와 동일합니다. Java의 이식성과 모순되는 .NET Framework의 특정 버전을 설치해야하는 Managed (.NET) API도 있습니다.

따라서 Java 런타임의 개발자는 Windows에서 현재 시간대와 관련하여 어려움을 겪습니다. Microsoft가 협조해야 할 몇 가지 이유가있을 때까지 계속 될 수 있습니다.