시간대에 대한 DST 변경을 비활성화하는 방법은 무엇입니까?

시간대에 대한 DST 변경을 비활성화하는 방법은 무엇입니까?

내 시스템 시간대는 Asia/Tehran이고DST 변경 조정여름(봄 앞으로), 겨울 뒤로; 하지만 이러한 DST 조정을 비활성화하고 시간대를 항상 UTC+3:30으로 유지해야 합니다. Linux에서 이 작업을 어떻게 수행합니까?

답변1

1부: 운영 체제 시간대 업데이트

~에서2022년 9월 22일부터 이란은 일광 절약 시간제를 폐지하고 연중 표준시를 준수합니다.. 이것첫 번째이러한 업데이트가 포함된 공식 패키지는 IANA의 "tzdata2022b.tar.gz" 패키지에 있으므로 여기에서 아시아/테헤란 지역 시간대 업데이트를 적용하는 방법은 다음과 같습니다.

  1. 패키지 다운로드tzdata2022b.tar.gz압축을 풀어보세요.최신 패키지를 받으려면 여기를 클릭하여 모든 패키지를 확인하세요..

    $ tar -xzvf tzdata2022b.tar.gz
    
  2. "zic"(시간대 컴파일러) 명령을 통해 컴파일하여 관심 지역(아시아) 시스템 시간대 데이터에 업데이트를 적용합니다.루트/루트 권한사용자):

    # zic asia
    

    노트: 이러한 변경 사항은 아시아/테헤란 및 기타 아시아 지역에 직접 적용됩니다.

  3. 다음 명령을 사용하여 업데이트가 올바르게 적용되었는지, DST가 비활성화되었는지 확인합니다("9월 21일 수요일 23:59:59"(이란 표준시로 +0330으로 대체) 이후 날짜에는 DST 조정이 발생하지 않습니다.) 금후 ):

    # zdump -v -c2022,2029 Asia/Tehran Asia/Tehran -9223372036854775808 = NULL Asia/Tehran -9223372036854689408 = NULL Asia/Tehran Mon Mar 21 20:29:59 2022 UTC = Mon Mar 21 23:59:59 2022 +0330 isdst=0 Asia/Tehran Mon Mar 21 20:30:00 2022 UTC = Tue Mar 22 01:00:00 2022 +0430 isdst=1 Asia/Tehran Wed Sep 21 19:29:59 2022 UTC = Wed Sep 21 23:59:59 2022 +0430 isdst=1 Asia/Tehran Wed Sep 21 19:30:00 2022 UTC = Wed Sep 21 23:00:00 2022 +0330 isdst=0 Asia/Tehran 9223372036854689407 = NULL Asia/Tehran 9223372036854775807 = NULL

  4. /etc/localtime현지 시간을 수정된 시간대 정보와 다시 연결하려면 다음 명령을 사용하십시오.

    # zic -l Asia/Tehran
    
  5. 정확한 날짜와 시간을 확인 date하고 보고하십시오.hwclock


국가별 시간대 업데이트(이 답변에서는 아시아/테헤란)를 구축하고 적용하는 방법에 대한 솔루션은 다음과 같습니다.
  1. 라는 사용자 정의 ZONE 파일을 생성 Tehran_timeZone하고 다음 영역 정보를 추가합니다(각 국가의 규칙 및 영역 정보는 tzdata2022b.tar.gz 패키지의 관련 영역 파일에서 찾을 수 있음).

    $ cat Tehran_timeZone
    # Rule  NAME    FROM    TO  -   IN  ON  AT  SAVE    LETTER/S
    Rule    Iran    1910    only    -   Jan  1  00:00   0   -
    Rule    Iran    1977    only    -   Mar 21  23:00   1:00    -
    Rule    Iran    1977    only    -   Oct 20  24:00   0   -
    Rule    Iran    1978    only    -   Mar 24  24:00   1:00    -
    Rule    Iran    1978    only    -   Aug  5  01:00   0   -
    Rule    Iran    1979    only    -   May 26  24:00   1:00    -
    Rule    Iran    1979    only    -   Sep 18  24:00   0   -
    Rule    Iran    1980    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    1980    only    -   Sep 22  24:00   0   -
    Rule    Iran    1991    only    -   May  2  24:00   1:00    -
    Rule    Iran    1992    1995    -   Mar 21  24:00   1:00    -
    Rule    Iran    1991    1995    -   Sep 21  24:00   0   -
    Rule    Iran    1996    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    1996    only    -   Sep 20  24:00   0   -
    Rule    Iran    1997    1999    -   Mar 21  24:00   1:00    -
    Rule    Iran    1997    1999    -   Sep 21  24:00   0   -
    Rule    Iran    2000    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2000    only    -   Sep 20  24:00   0   -
    Rule    Iran    2001    2003    -   Mar 21  24:00   1:00    -
    Rule    Iran    2001    2003    -   Sep 21  24:00   0   -
    Rule    Iran    2004    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2004    only    -   Sep 20  24:00   0   -
    Rule    Iran    2005    only    -   Mar 21  24:00   1:00    -
    Rule    Iran    2005    only    -   Sep 21  24:00   0   -
    Rule    Iran    2008    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2008    only    -   Sep 20  24:00   0   -
    Rule    Iran    2009    2011    -   Mar 21  24:00   1:00    -
    Rule    Iran    2009    2011    -   Sep 21  24:00   0   -
    Rule    Iran    2012    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2012    only    -   Sep 20  24:00   0   -
    Rule    Iran    2013    2015    -   Mar 21  24:00   1:00    -
    Rule    Iran    2013    2015    -   Sep 21  24:00   0   -
    Rule    Iran    2016    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2016    only    -   Sep 20  24:00   0   -
    Rule    Iran    2017    2019    -   Mar 21  24:00   1:00    -
    Rule    Iran    2017    2019    -   Sep 21  24:00   0   -
    Rule    Iran    2020    only    -   Mar 20  24:00   1:00    -
    Rule    Iran    2020    only    -   Sep 20  24:00   0   -
    Rule    Iran    2021    2022    -   Mar 21  24:00   1:00    -
    Rule    Iran    2021    2022    -   Sep 21  24:00   0   -
    
    # Zone  NAME        STDOFF  RULES   FORMAT  [UNTIL]
    Zone    Asia/Tehran 3:25:44 -   LMT 1916
                3:25:44 -   TMT 1935 Jun 13 # Tehran Mean Time
                3:30    Iran    +0330/+0430 1977 Oct 20 24:00
                4:00    Iran    +04/+05 1979
                3:30    Iran    +0330/+0430
    

    구성 매개변수에 대한 자세한 내용은 "만지크"

  2. "zic" 명령을 통해 아시아/테헤란 시간대 업데이트를 적용하도록 컴파일합니다.

    $ zic Tehran_timeZone
    
  3. /etc/localtime현지 시간을 수정된 시간대 정보와 다시 연결하려면 다음 명령을 사용하십시오.

    # zic -l Asia/Tehran
    

노트: 사용 중인 Linux 배포판에 따라 시작 시 시스템이 사용하는 영역을 재구성해야 합니다( tzdata-update또는 구성 사용 timedatectl set-timezone Asia/Tehran).

노트:user/shell level timeZone 기본적으로 사용자/셸 수준에서 날짜와 시간을 표시할 때 동일한 명령이 사용되지만
변수가 다른 값으로 설정된 경우 해당 변수의 시간대를 읽고 적용하므로 Unset/ 이를 제거하거나 사용자 수준 쉘 구성 파일의 현재 위치로 설정하십시오. 이는 변수가 설정될 수 있는 사용자의 홈 디렉토리에서 파일을 찾는 명령입니다.date/etc/localtimeTZTZTZ='Asia/Tehran'TZ

# find /home/ -maxdepth 2 -type f -exec grep -wH 'TZ' {} +

노트: 시스템 전체 셸 구성 파일에 대해서도 동일하게 업데이트해야 합니다.


2부: Java 기반 애플리케이션(OpenJDK, OracleJDK, IBMJDK 등)의 시간대 업데이트

  1. 업데이트된 시간대 파일(https://data.iana.org/time-zones/releases/tzdata2022b.tar.gz)

  2. tzdata2022b.tar.gz파일을 Java 호환 시간대로 컴파일 하려면 Java 기반 컴파일러를 다운로드해야 합니다 . 우리는 오픈 소스 ZIUpdater 도구를 사용했습니다.https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/)

  3. 다음 명령을 실행하여 도구를 사용하여 tzdata2022b.tar.gz 패키지에서 시간대를 컴파일하십시오 ziupdater.jar.

    $JAVA_HOME/bin/java -jar ziupdater.jar -l tzdata2022b.tar.gz
    
  4. 완벽한. 이 도구는 JDKv8+ 및 JDKv7 및 이전 버전에 대해 tzdb.dat(tzdb.dat의 원래 위치)를 생성하고 ziupdater.jar업데이트된 모든 시간대 파일을 포함하는 (원래 위치는 )라는 디렉터리를 생성합니다. 이전 시간대만 바꾸면 됩니다. 새 시간대를 사용하여 파일을 생성합니다(먼저 이전 시간대에서 백업을 만들어야 할 수도 있음).$JAVA_HOME/lib/tzdb.datzi$JAVA_HOME/lib/zi/*

  5. 응용 프로그램을 다시 시작해야 할 수도 있습니다.

노트:
시간대를 패치한 후 필요한 경우:

  1. TZ환경 변수를 설정 해제 하고 sshd서비스를 다시 시작합니다.
  2. 재시작 cron/ crond서비스.
  3. rsyslogsyslog 서비스 또는 서버가 실행 중인 다른 syslog 서비스를 다시 시작합니다 .
  4. 일부 응용 프로그램(특히 데이터베이스)은 운영 체제나 JDK 시간대 파일을 모두 사용하지 않을 수 있습니다. 이에 대한 방법을 알아보려면 해당 설명서를 별도로 참조해야 합니다.

관련 정보