タイムゾーンの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タイムゾーンファイルの両方を使用しない場合があります。その方法については、各マニュアルを別途参照する必要があります。

関連情報