1992.5.13


SUBJECT: ROK timezone의 KDT,KST 에 관하여

MEANING OF THIS MEMO:

CONTENTS:
      0. KDT,KST의 의미
      1. /usr/share/lib/zoneinfo/asia file
      2. zic의 사용
      3. Daylight time setting을 제거하는 방법
      4. 참고자료

DESCRIPTION :

      0. KDT와 KST의 의미
         * date command를 사용할 때 display되는 line의 끝에 time zone의 약어가 표시된다.
         * time zone ROK의 약어는 일반적으로 KST를 사용한다.
           이는 Korean Standard Time 정도의 의미일 것이다.
           그런데 간혹 KDT라는 약자가 display되는 경우가 있다. 
           이는 Korea Daylight Time의 의미로 daylight saving time
           즉 summer time을 사용할 때 표시되는 약어이다.
         * time zone 설정에 관련된 default 값들은 /usr/share/lib/zoneinfo/asia 에 있고
           혹시라도 time zone의 변경시에는 이 file의 값들을 변경하여 zic을 사용하면 된다.
         * 한 때 summer time을 실시 했던 관계로
           aisa file의 ROK zone에는 default로 daylight time이 setting되어 있으며,
           SunOS install의 time zone setting시에도 이 daylight 값이 setting된다고
           추정된다.
           이러한 이유로 date command 사용시 KST와 KDT가 혼용되는 경우가 발생하게 된다.
         * 현재 daylight time 사용이 불필요함에도 SunOS에서 default로 setting되어
           5월 2째주 일요일 02:00부터 10월 2째주 일요일 02:00시 까지를
           daylight saving (summer time화)하고 있다.
           이 기간 중에 date command 를 수행하면 KDT가 display되는 것이다.
         * 따라서 time zone 사용에서
           daylight saving의 영향을 제거하는 것이 원칙이 될 것이다.
           즉  KDT가 display되는 경우가 없도록 하여야 한다. 
           특히 date를 check하여 이를 기본으로 어떤 작업을 수행하는 site의 경우라면 
           daylight time이 수행되는 것을 막아주는 작업을 해 주어야 한다.
           이는 2.에서 설명될 것이다.

      1. /usr/share/lib/zoneinfo/asia 중에서 time zone ROK 의 display format
         * /usr/share/lib/zoneinfo/asia file은 각 time zone이 사용할 default 정보가 있음.
         * 아래 설명되는 세 가지 format들은 그 순서에 상관 없이 설정될 수 있다.
         * Rule line format :
                  # Rule  NAME  FROM  TO  TYPE   IN   ON      AT    SAVE  LETTER/S
                  Rule    ROK   1987  max   -    May  Sun<=14 2:00  1:00    D
                  Rule    ROK   1987  max   -    Oct  Sun<=14 3:00   0      S
           - 이는 ROK라는 time zone이  87년 이후로  매년 5월 2째주 일요일 02:00부터
             10월 2째주 일요일 02:00시 까지를
             daylight saving (summer time화)한다는 의미.
           - LETTER field는 
             time zone의 약자(abbreviation) 중에서 변수부분에 설정될 값을 설정하는 곳.
         * Zone line format :
                   # Zone  NAME  GMTOFF  RULES/SAVE  FORMAT  [UNTIL]
                   Zone     ROK    9:00    ROK        K%sT
           - NAME field는 time zone의 이름을 설정하는데 사용되며,
                 또한 여기에 설정된 이름은 zone에 대한 time conversion 정보를
                 만들때 사용된다.
           - GMTOFF field는 zone의 standard time을 얻기 위해 
                 GMT에 더하거나 뺄 시간을 설정한다.
           - RULES/SAVE field는 
                 time zone 에 적용되는 Rule 의 NAME을 설정하거나
                 local standard time 에 더할 시간을 설정하기도 한다.
           - FORMAT field에선 
                 앞의 Lule line format의 LETTER field에서 설정된 변수부분의 값을
                 %s 에 대치한다.  따라서 위의 예에 따른다면 
                 date command 사용시 KST or KDT가 display될 것이다.
         * Link line format :
                    # Link    LINK-FORM   LINK-TO
                    Link      ROK         localtime
           - LINK-FORM field에선 
                 Zone line의 NAME field에 설정된 값이 기록된다.
           - LINK-TO field에선 
                 zone 에 대한 alternate name으로서 사용될 이름을 기록한다.
                 위의 예에서는 time zone인 ROK를 local time으로 사용한다는 의미이다.

      2. zic
         * time zone compiler
         * zic은 command line서 주어진 file로 부터 text를 읽어들여 여기서 명시된
           time conversion information file을 만든다.
           즉 1.에서 설명한 세 가지 line format으로 input을 받아들여 그 중 NAME field에
           설정된 이름으로 file을 만든다.
         * 만드는 곳은 default로 /usr/share/lib/zoneinfo이다.
         * filename이 '-'라면  standard input이 읽혀진다.
         * comment out 된 부분은 해석하지 않는다.

      3. Daylight time setting을 제거하는 방법
         * 이 방법은 여러가지가 있을 수 있다. 편하다고 생각되는 방법 택하면 될 것.
         * 방법 1 :
           -  # cat > k
              Zone Korea 9:00 - KST
              ^D
           -  # zic k        ( 이는 /usr/share/lib/zoneinfo 밑에 
                                            Korea라는 이름의 file을 만든다.)
           -  # cd /usr/share/lib/zoneinfo
           -  # rm localtime    ( local time이 기존의 time zone으로 
                                                hard link된 것을 끊는 것이다.)
           -  # ln Korea localtime
           -  # tzsetup ( 이는 SunOS 4.0 이전 version에서 사용한다. 
                            SunOS 4.0 이전에는 gettimeofday()라는 system call을
                            사용하여 kernel로 부터 time zone information을 얻기 때문에
                            tzsetup을 사용한다 )
           -  # zdump Korea ( 이는 Korea라는 zonename의 current time을 보여준다.
                                 특별한 용도가 있는 것 같지 않음. 사용치 않아도 무방 )
           - example:
               sparc# date
               1992년05월13일(수) 17시19분40초 KST
               sparc# date 8809090900
               1988년09월09일(금) 09시00분00초 KDT
               sparc# cat > /tmp/k
               Zone Korea 9:00 - KST
               sparc# zic /tmp/k
               sparc# ls -li localtime ROK Korea
               4726 -rw-r--r--  1 root           55 Sep  9 09:01 Korea
               4728 -rw-r--r--  2 root           76 May 13  1992 ROK
               4728 -rw-r--r--  2 root           76 May 13  1992 localtime
               sparc# rm localtime
               sparc# ln Korea localtime
               sparc# ls -li localtime ROK Korea
               4726 -rw-r--r--  2 root           55 Sep  9 08:01 Korea
               4728 -rw-r--r--  1 root           76 May 13  1992 ROK
               4726 -rw-r--r--  2 root           55 Sep  9 08:01 localtime
               sparc# date
               1988년09월09일(금) 08시02분26초 KST
               sparc# zdump Korea
               Korea  Fri Sep  9 08:02:46 1988 KST

         * 방법 2 :
           - # cd /usr/share/lib/zoneinfo 
           - 1.에서 예로 든 asia file의 세 가지 line format의 값대로 aisa file을 edit한다.
             다만 Rule line format 중 daylight line을 comment out해 주면 된다.
                      # Rule  NAME  FROM  TO  TYPE   IN   ON      AT    SAVE  LETTER/S
                      #Rule    ROK   1987  max   -    May  Sun<=14 2:00  1:00    D
                      Rule    ROK   1987  max   -    Oct  Sun<=14 3:00   0      S
           - # rm localtime ( 기존 사용하던 time zone name이 ROK가 아닌 경우만 해당됨)
           - # grep ROK asia | zic -
           - example:
                 (방법 1 의 example에서 계속 작업한 것임.)
               sparc# cd /usr/share/lib/zoneinfo 
               sparc# grep ROK asia
               Rule   ROK     1987    1988    -       May     Sun<=14 2:00    1:00    D
               Rule   ROK     1989    max     -       Oct     Sun<=14 3:00    0       S
               Zone   ROK             9:00    ROK             K%sT
               Link      ROK         localtime
               sparc# vi asia                 ( daylight 관련 Rule line을 comment out한다)
               sparc# grep ROK asia
               #Rule   ROK     1987    1988    -       May     Sun<=14 2:00    1:00    D
               Rule   ROK     1989    max     -       Oct     Sun<=14 3:00    0       S
               Zone   ROK             9:00    ROK             K%sT
               Link      ROK         localtime
               sparc# grep ROK asia | zic -   ( time zone name이 ROK로 생성됨 )
               sparc# rm localtime            ( time zone name이 Korea로 사용되고 있기 때문)
               /usr/share/lib/zoneinfo
               sparc# ln ROK localtime
               sparc# date
               1988년09월09일(금) 08시14분10초 KST
               sparc# zdump ROK
               ROK  Fri Sep  9 08:47:03 1988 KST

      4. 참고자료
          zic(8) tzsetup(8) zdump(8)

  Revision History
  Updated       on May 13 ,1992