私のシステムタイムゾーンはAsia / Tehranです。DST変更調整夏(春に戻る)、冬に戻る。ただし、これらのDST調整を無効にしてタイムゾーンを常にUTC + 3:30に保つ必要があります。 Linuxでこれを行うにはどうすればよいですか?
答え1
パート1:オペレーティングシステムのタイムゾーンの更新
~から2022年9月22日から、イランは夏時間を廃止し、年中標準時を遵守します。。これ最初これらのアップデートを含む公式パッケージはIANAの "tzdata2022b.tar.gz"パッケージにありますので、ここでアジア/テヘラン地域のタイムゾーンアップデートを適用する方法は次のとおりです。
パッケージをダウンロードtzdata2022b.tar.gz解凍してみてください。最新のパッケージを入手するには、ここをクリックしてすべてのパッケージを確認してください。。
$ tar -xzvf tzdata2022b.tar.gz
"zic"(タイムゾーンコンパイラ)コマンドを使用してコンパイルして、対象地域(アジア)のシステムタイムゾーンデータに更新を適用します。ルート/ルート権限ユーザー):
# zic asia
ノート:これらの変更は、アジア/テヘランおよびその他のアジア地域に直接適用されます。
次のコマンドを使用して、更新が正しく適用されていること、および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
/etc/localtime
現地時間を変更されたタイムゾーン情報に再接続するには、次のコマンドを使用します。# zic -l Asia/Tehran
正確な日付と時刻を確認して
date
報告してください。hwclock
国別のタイムゾーン更新(この回答ではアジア/テヘラン)を構築して適用する方法の解決策は次のとおりです。
というカスタム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
設定パラメータの詳細については、マンジク」
"zic"コマンドを使用してアジア/テヘランのタイムゾーン更新を適用するようにコンパイルします。
$ zic Tehran_timeZone
/etc/localtime
現地時間を変更されたタイムゾーン情報に再接続するには、次のコマンドを使用します。# zic -l Asia/Tehran
ノート:使用しているLinuxディストリビューションに応じて、起動時にシステムが使用する領域を再設定する必要があります(tzdata-update
または設定を使用timedatectl set-timezone Asia/Tehran
)。
ノート:user/shell level timeZone デフォルトでは、ユーザー/シェルレベルで日付と時刻を表示するときに同じコマンドが使用されますが、
変数が異なる値に設定されている場合は、その変数のタイムゾーンを読み取り、適用するため、Unset/これを削除するか、ユーザーレベルのシェル構成ファイルの現在位置に設定します。これは、変数を設定できるユーザーのホームディレクトリでファイルを検索するコマンドです。date
/etc/localtime
TZ
TZ
TZ='Asia/Tehran'
TZ
# find /home/ -maxdepth 2 -type f -exec grep -wH 'TZ' {} +
ノート:システム全体のシェル構成ファイルについても同じように更新する必要があります。
パート2:Javaベースのアプリケーション(OpenJDK、OracleJDK、IBMJDKなど)のタイムゾーンの更新
更新されたタイムゾーンファイル(https://data.iana.org/time-zones/releases/tzdata2022b.tar.gz)
tzdata2022b.tar.gz
ファイルをJava準拠のタイムゾーンにコンパイルするには、Javaベースのコンパイラをダウンロードする必要があります。私たちはオープンソースのZIUpdaterツールを使用しました。https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/)次のコマンドを実行して、ツールを使用してtzdata2022b.tar.gzパッケージでタイムゾーンをコンパイルします
ziupdater.jar
。$JAVA_HOME/bin/java -jar ziupdater.jar -l tzdata2022b.tar.gz
完璧。このツールはJDKv8 +およびJDKv7以前のバージョンのtzdb.dat(tzdb.datの元の場所)を生成し、更新されたすべてのタイム
ziupdater.jar
ゾーンファイルを含む(元の場所は)というディレクトリを作成します。前の時間帯を変更するだけです。新しいタイムゾーンを使用してファイルを作成します(最初に古いタイムゾーンでバックアップを作成する必要があるかもしれません)。$JAVA_HOME/lib/tzdb.dat
zi
$JAVA_HOME/lib/zi/*
アプリケーションを再起動する必要があります。
メモ:
タイムゾーンをパッチした後に必要な場合:
TZ
環境変数の設定を解除してsshd
サービスを再起動します。- 再起動
cron
/crond
サービス。 rsyslog
syslogサービスまたはサーバーが実行されている他のsyslogサービスを再起動します。- 一部のアプリケーション(特にデータベース)は、オペレーティングシステムまたはJDKタイムゾーンファイルの両方を使用しない場合があります。その方法については、各マニュアルを別途参照する必要があります。