2011-02-11 3 views
7

모든 시간대는Linux- Windows 시간대 매핑? Windows의

GMT,

(GMT+10:00) Canberra, Melbourne, Sydney 같은 방식으로 표시 오프셋 및 장소된다. 차례대로 리눅스는 모든 시간대를/usr/share/zoneinfo/[Continent]/[Place]에 디렉토리 매핑으로 가지고 있습니다.

저는 모든 Windows 표준 시간대를 응용 프로그램의 Linux 표준 시간대에 매핑해야합니다.

(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi => Asia/Calcutta 

처럼 이제 International Date Line West에 대한 문제의 표면은 러시아와 미국 사이에 자리 잡고 있습니다. 윈도우즈에서는 (GMT-12 : 00) International Date Line West와 여러 소스에서 리눅스에서 발견되었습니다. Etc/GMT + 12.

(GMT-12:00) International Date Line West => Etc/GMT+12 

(GMT+12:00) Coordinated Universal Time+12 => Etc/GMT-12 
(GMT-02:00) Coordinated Universal Time-02 => Etc/GMT+2 
(GMT-11:00) Coordinated Universal Time-11 => Etc/GMT+11 

이 나를 의아해하고 내 애플 UTC w.r.t 타임 스탬프 오프셋 UTC와 긴밀하게 협력 유지합니다. 그래서이 매핑은 저와 앱을 혼란스럽게합니다.

누구나 같은 장소에서 둘 다 -12 및 +12 오프셋의 반대가있는 이유를 설명 할 수 있습니까? 사전에

감사합니다 :)이 Etc 디렉토리에

답변

20

Unicode.org는 CLDR의 일부로 매핑을 호스트합니다. You can get to the latest version here. 또한 해당 페이지에서 링크 된 데이터의 XML 버전이 있습니다.

XML 데이터 here에서 매핑을 생성하는 방법에 대한 예제 코드 (Python)를 찾을 수 있습니다.

필수 시간대 호언 장담은 : 누구든지 Windows에서 시간대 지원을 구현하는 것은 약물에 있던

하는 것으로. 농담이 아니에요. 시간대 이름을보십시오. 왜 중부 유럽의 시간은 "로맨스 표준 시간"으로 알려져 있습니다. 로맨스? 뭐, 파리가 포함 되었기 때문에? 로마 표준시 (Rome Standard Time)는 로마도 포함되지만 의미는 알 수있었습니다.

또한 레지스트리에서 시간대는 해당 ID로 구성되어 있지 않습니다. 아닙니다. 그들은 표시 이름에 따라 미친 듯이 조직되었습니다. 그것이 지역화 되었기 때문에 모든 표준 시간대가 Windows의 다른 번역에서 다른 키 아래에 위치한다는 것을 의미합니다 !!! 따라서 올바른 시간대를 찾으려면 모든 시간대를 통해 올바른 ID가 있는지 확인해야합니다.

나는 그 예의 예제 코드가 here입니다. get_win_timezone() 기능을 참조하십시오.

POSIX가 시간대 기호를 뒤집어야한다고 결정한 사람과 동일한 사람인지 궁금합니다. -8 시간은 8 시간을 의미합니다. 어쨌든, 나는 그들이 불법적으로 함께 흡연하고 있다고 확신한다.

+0

Thanks Lennart and NullToken :) –

+1

2013 년 1 월 25 일 현재 unicode.org의 시간대 데이터는 적어도 7 년이 지났다. 지금까지 나는 그것이 아시아/콜카타 (아시아/캘커타에서 이름이 바뀜), 아메리카/인디애나/인디애나 폴리스, 아메리카/켄터키/루이빌을 놓치고 있음을 발견했다. 이것은 여전히 ​​Windows 시간대를 Linux에 매핑하는 데는 문제가 없지만이 데이터가 수정 될 때까지는이 데이터를 사용하지 않을 것입니다. – geofflee

+0

@geofflee : 유감 스럽지만 시간대 데이터가 있다는 것을 몰랐고, 업데이트하지 않으면 어떻게되는지 알지 못합니다. 어쨌든, 나는 시간대 이름 매핑에만 사용한다. –

2

정의는 POSIX 스타일로 의미가있다, 따라서 그들은 자신의 기호 당신이 기대하는 것과 반대합니다. POSIX의 전문가는 아니지만, 기본 아이디어는 현지 이름과 GMT 오프셋의 조합으로 타임 존을 표현하는 것이 었습니다. 중앙 유럽의 예 (중앙 유럽 표준시/CET) : 사실에서 Etc 디렉토리에

Europe/Berlin (w/o daylight savings) equals GMT+01:00 equals CET-1 

GMT-1 한 시간 앞서 (실제) GMT의는 "GMT"라는 (fictous) 시간대에 대해 설명합니다.

필자가 아는 한,이 파일들은 당신이 그들 (심볼릭 링크)을 만들 수 있도록하기위한 것일 뿐이므로, 중간 유럽의 어느 곳이라면 GMT-1에 대한 링크를 만들어 CET-1이라고 할 수 있습니다.

내가 줄 수있는 최선의 제안은 Etc 디렉토리를 완전히 무시하고 Windows 시간대 이름의 일부 매핑 테이블을 사용하여 UNIX 시간대 폴더/파일을 사용하는 것입니다. Windows 시간대 정보는 GMT에 오프셋을 제공 할뿐만 아니라 일광 절약 시간 (시작 시간 또는 종료 시간)을 알고 있습니다. 표준 시간대 데이터베이스의 폴더/파일은 마찬가지이지만 Etc 디렉토리의 파일은 아닙니다. 이는 GMT에 대한 간단한 정적 오프셋을 제공합니다.

tz 데이터베이스의 시간대 목록은 in the wikipedia입니다.

+0

:) 당신의 제안에, 나는 진짜 이유를 발견하고 해결책을 얻었습니다 :) Thanks Patrick :) –

2

모든 파일의 부호가 반대로 바뀌면보고있는 파일은 정방향 매핑 오프셋이고 역 자주 매핑 오프셋은 역 매핑입니다.

Windows는 일반적으로 시스템의 내부 시간으로 현지 시간대를 사용하므로 UTC로 다시 변환 할 수있는 시간대 파일이 필요합니다. Linux는 일반적으로 UTC를 시스템의 내부 시간으로 사용하므로 현지 시간으로 변환 할 수있는 시간대 파일이 필요합니다.

두 시스템에 대한 오프셋은 시간은 비슷하지만 반대 방향으로 설명하기 때문에 표준 시간대 파일이 서로 역관계를 갖고 있다고 판단됩니다. 즉, 하나의 영역 파일 집합을 선택하면 다른 집합은 음수가됩니다.