2011-10-24 2 views
7

Joda 시간대로 놀고 있었고 이상하게 보인 다음을 발견했습니다. Joda 시간대 계산

내가 다음 코드

DateTimeZone gmt = DateTimeZone.forID("Etc/GMT"); 
    DateTimeZone gmtPlusOne = DateTimeZone.forID("Etc/GMT+1"); 
    DateTimeZone gmtMinusOne = DateTimeZone.forID("Etc/GMT-1"); 

    System.out.println(new DateTime(gmt).toString()); 
    System.out.println(new DateTime(gmtPlusOne).toString()); 
    System.out.println(new DateTime(gmtMinusOne).toString()); 

를 실행 그리고 다음과 같은 결과를 얻었다

2011-10-24T13:00:12.890Z 
2011-10-24T12:00:12.937-01:00 
2011-10-24T14:00:12.937+01:00 

I이었다 -01과 뒤에 일시간으로 나오는 "gmtPlusOne"를 참조 놀라게 조금 : 00과 "gmtMinusOne"의 반대입니다. 누군가 내가 왜 그 반대가 될 것이라고 예상했는지 설명 할 수 있을까요?

+2

돈 ' Jon이 곧 여기에 올 것입니다 ;-) – Voo

답변

15

이 설명서 http://joda-time.sourceforge.net/timezones.html은 그 이유를 설명하기에는 직관적이지 않습니다. Etc/GMT+1은 표준 오프셋이 -1:00이고 Etc/GMT-1은 표준 오프셋이 +1:00입니다. 오프셋의 역전은 Etc/GMT+n에 적용됩니다.

wiki에서 기타의 특수 영역은 일부 관리 영역에 사용되는, 특히 협정 세계 시간을 나타내는 '기타/UTC "에 대한 . POSIX 스타일을 따르기 위해 "Etc/GMT"로 시작하는 영역 이름은 대부분 사람이 예상하는 것과 반대로 표시가 있습니다. 이 스타일에서 서쪽 GMT의 영역은 긍정적 인 신호 이 있고 그 동쪽은 이름에 음의 부호가 (예 : "기타/GMT-14"GMT 앞서/동쪽 14 시간입니다.)

+0

Apple은 [이 텍스트 파일] (http://opensource.apple.com/source/system_cmds/system_cmds-230/zic.tproj/datfiles/etcetera)에서이 POSIX 문제에 대해 설명합니다. . "많은 사람들이 기대하는 것과 반대이지만 존 이름과 출력 약어에 POSIX 스타일의 기호를 사용합니다. POSIX는 그리니치 서쪽에서 긍정적 인 신호를 보이지만 많은 사람들은 그리니치 동부에서 긍정적 인 신호를 기대합니다. 예를 들어, TZ = 'Etc/GMT + 4'는 "GMT + 4"라는 약어를 사용하며 많은 사람들이 UTC보다 4 시간 앞당겨 질 것이라고 기대하더라도 UTC보다 4 시간 늦었습니다 (즉, 그리니치 서쪽)) –

+0

이 '기타'는 불필요합니다. 보통 '아시아/콜카타'또는 '아메리카/몬트리올'과 같이 대륙 + 슬래시 + 도시/지역 인 [적절한 시간대 이름] (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)을 사용하십시오. –