2014-04-09 3 views
2

Java의 GregorianCalendar 오브젝트의 getTimeInMillis() 메소드를 이해하려고합니다. XMLGregorianCalendar/GregorianCalendar 시간을 밀리 초 단위로 이해

내 혼란이 발생하는 경우

1390089600000 
1390073400000 

이이 출력은 다음과

 XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000-00:00"); 
     XMLGregorianCalendar cal1 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000+04:30"); 
     System.out.println(cal.toGregorianCalendar().getTimeInMillis()); 
     System.out.println(cal1.toGregorianCalendar().getTimeInMillis()); 

아래의 코드를 생각해 보자. 입력 시간 (2014-01-19T00:00:00.000-00:002014-01-19T00:00:00.000+04:30)을 보면 동일한 시간이 참조됩니다. 따라서 getTimeInMillis()에 의해 반환되어야하는 UTC 시간은 같아야하지만 차이점이 있음을 알 수 있습니다. 이 경우의 차이점은 두 번째 시간 문자열의 시간대 오프셋 인 밀리 초 단위로 표현 된 4.5 시간입니다.

내 이해가 잘못 될지 잘 모르겠습니다.

+0

입력 시간은 어떻게 같습니까? 내가 뭘 놓치고 있니? –

+1

cal과 cal1이라는 두 개의 별개의 인스턴스가 있기 때문에 "동일한 인스턴스를 참조합니다"라는 문장이 혼란 스럽습니다. –

+0

은 내가 의미하는 바를 나타 내기 위해 그것을 "같은 시간의 순간"으로 바 꾸었습니다. GMT의 자정과 GMT보다 4.30 시간 앞서있는 시간대의 오전 4시 30 분은 똑같은 순간입니다. 또는 적어도 이것은 내 이해입니다 ... – mihirg

답변

1

오프셋이 +00 : 00 인 경우 UTC 시간입니다.

오프셋이 다른 경우 (예 : +04 : 30) UTC 시간을 얻으려면 로컬 시간 (오프셋 부분보다 왼쪽 부분)에서이 오프셋을 뺍니다.

마지막으로 동일한 현지 시간이지만 다른 오프셋을 사용하면 UTC 시간이 달라집니다! 일반 공식은 다음과 같습니다.

UTC + offset = (local time) 
관련 문제