Skip to content

tzfile(5)

Seonghun Lim edited this page Oct 13, 2019 · 4 revisions

NAME

tzfile - 시간대 정보

DESCRIPTION

tzset(3)에서 쓰는 시간대 정보 파일들은 보통 /usr/share/zoneinfo 같은 이름의 디렉터리 아래에 있다. 그 파일들은 다음 필드들을 담은 44바이트 헤더로 시작한다.

  • 시간대 정보 파일임을 나타내는 4바이트짜리 ASCII 열 "TZif".

  • 파일 형식 버전을 나타내는 한 바이트. (2017년 현재 ASCII NUL이거나, "2"이거나, "3".)

  • 향후 용도를 위해 예비된 0을 담은 15바이트.

  • 표준 바이트 순서(값의 상위 바이트 먼저)로 기록된 4바이트짜리 정수 값 여섯 개. 그 값들은 차례로 다음과 같다.

    tzh_ttisgmtcnt
    파일에 저장된 UT/로컬 표시자 수.
    tzh_ttisstdcnt
    파일에 저장된 표준/벽시계 표시자 수.
    tzh_leapcnt
    파일에 데이터 항목이 저장돼 있는 윤초 수.
    tzh_timecnt
    파일에 데이터 항목이 저장돼 있는 전환 시간 수.
    tzh_typecnt
    파일에 데이터 항목이 저장돼 있는 지역 시간 종류 개수. (0이 아니어야 함.)
    tzh_charcnt
    파일에 저장된 시간대 축약명 문자열들의 바이트 수.

위 헤더 다음으로 다음 필드들이 오는데, 헤더 내용에 따라 길이가 정해진다.

  • 오름차순으로 정렬된 4바이트 부호 있는 정수 값 tzh_timecnt 개. 이 값들은 표준 바이트 순서로 기록된다. 지역 시간 계산 규칙이 바뀌는 전환 시간으로 쓰인다. (time(2) 반환 값으로 나타냄.)

  • 1바이트 부호 없는 정수 값 tzh_timecnt 개. 파일에 기술된 여러 지역 시간 종류들 중 어느 게 같은 인덱스의 전환 시간부터 다음 전환 시간 전까지의 기간에 연계돼 있는지 알려 준다. (단 마지막 시간 종류 항목은 아래 기술된 POSIX 스타일 TZ 문자열과의 일관성 검사를 위해 있을 뿐이다.) 이 값들이 다음 필드에서 인덱스 역할을 한다.

  • 다음처럼 정의된 ttinfo 항목 tzh_typecnt 개.

    struct ttinfo {
         int32_t        tt_gmtoff;
         unsigned char  tt_isdst;
         unsigned char  tt_abbrind;
    };

    각 구조체는 표준 바이트 순서로 된 4바이트 부호 있는 정수 값 tt_gmtoff, 1바이트 값 tt_isdst, 1바이트 값 tt_abbrind로 이뤄진다. 각 구조체에서 tt_gmtoff는 UT에 더해야 할 초 수이고, tt_isdstlocaltime(3)에서 tm_isdst를 설정해야 하는지 여부를 나타내며, tt_abbrind는 파일에서 ttinfo 구조체(들) 다음에 오는 시간대 축약명 문자열 배열에서의 인덱스 역할을 한다.

  • 표준 바이트 순서로 된 4바이트 값 tzh_leapcnt 쌍. 각 쌍의 첫 번째 값은 윤초가 일어나는 음수 아닌 시간이고 (time(2) 반환 값으로 나타냄), 두 번째는 그 시간부터의 기간 동안에 적용할 윤초 개수이다. 시간 오름차순으로 쌍들이 저장돼 있다. 각 전환은 양수 또는 음수 1초 만큼의 윤초이며, 전환 간에는 항상 최소 28일 빼기 1초만큼의 간격을 둔다.

  • 1바이트 값으로 저장된 표준/벽시계 표시자 tzh_ttisdstcnt 개. 지역 시간 종류와 연계된 전환 시간들이 표준 시간과 벽시계 시간 중 어느 쪽으로 지정돼 있는지 나타낸다. POSIX 방식 시간대 환경 변수들을 다루는 과정에서 시간대 파일을 이용할 때 쓰인다.

  • 1바이트 값으로 저장된 UT/지역 표시자 tzh_ttisgmtcnt 개. 지역 시간 종류와 연계된 전환 시간들이 UT 시간과 지역 시간 중 어느 쪽으로 지정돼 있는지 나타낸다. POSIX 방식 시간대 환경 변수들을 다루는 과정에서 시간대 파일을 이용할 때 쓰인다.

tzh_timecnt가 0이거나 시간 인자가 파일에 기록돼 있는 첫 번째 전환 시간보다 앞인 경우에 localtime(3) 함수는 파일의 첫 번째 표준 시간 ttinfo 구조체를 (표준 시간 구조체가 없으면 그냥 첫 번째 ttinfo 구조체를) 사용한다.

버전 2 형식

버전 2 형식의 시간대 파일에서는 위의 헤더 및 데이터 다음에 두 번째 헤더 및 데이터가 오는데, 전환 시간과 윤초 시간에 각각 8바이트를 쓴다는 점을 빼곤 동일한 형식이다. (윤초 개수는 여전히 4바이트다.) 두 번째 헤더 및 데이터 다음에는 개행으로 감싼 POSIX TZ 환경 변수 스타일 문자열이 오는데, 파일에 저장된 마지막 전환 시간 후의 순간들을 (파일에 전환이 없다면 모든 순간들을) 처리할 때 쓰기 위한 것이다. 그 순간들에 대한 POSIX 표현이 존재하지 않는 경우에는 POSIX 스타일 TZ 문자열이 비어 있다. (즉 개행 사이에 아무것도 없다.) POSIX 스타일 TZ 문자열이 비어 있지 않은 경우에는 그 여덟 바이트 데이터로 된 전환 시간이 있다면 마지막 전환 시간 후의 지역 시간 종류와 그 TZ 문자열이 부합해야 한다. 예를 들어 그 문자열이 "WET0WEST,M3.5.0,M10.5.0/3"라고 하고, 마지막 전환 시간이 7월에 있다면 그 전환의 지역 시간 종류에서 UT보다 한 시간 동쪽이고 "WEST"로 줄여 쓰는 일광 절약 시간을 명시해야 한다. 또한 전환이 최소 한 번은 있을 때 무한대 과거부터 가장 이른 전환 시간 전까지의 기간에는 시간 종류 0번이 연계된다.

버전 3 형식

버전 3 형식의 시간대 파일에서는 newtzset(3)에서 기술하는 POSIX TZ 형식에 대한 두 가지 소규모 확장을 그 POSIX TZ 스타일 문자열에서 쓸 수 있다. 첫째로, 전환 시간의 시간 부분이 POSIX에서 요구하는 0에서 24까지의 부호 없는 값이 아니라 -167에서 167까지 범위의 부호 있는 값일 수 있다. 둘째로, DST가 1월 1일 00:00에 시작해서 12월 31일 24:00에 일광 절약 시간과 표준시 차이를 더한 때에 끝나는 경우에는 DST가 연중 내내 효력이 있다.

향후 형식이 바뀌면서 더 많은 데이터가 덧붙을 수 있다.

SEE ALSO

time(2), localtime(3), tzset(3), tzselect(8), zdump(8), zic(8)


2019-03-06

Clone this wiki locally