Linux

如何禁用時區的 DST 更改?

  • March 10, 2022

我的系統時區是亞洲/德黑蘭,它在夏季(春季向前)調整夏令時,在冬季調整;但是我確實需要禁用這些 DST 調整併將時區始終保持在 UTC+3:30。我如何在 Linux 中做到這一點?

一種可能的解決方案是創建一個自定義時區並將其應用為您的系統時區,而不是您目前的亞洲/德黑蘭時區。

  1. 創建一個名為的自定義 ZONE 文件custom_timeZone並添加以下區域資訊:
$ cat custom_timeZone
#Zone NAME           GMTOFF RULES/SAVE  FORMAT [UNTIL]
Zone  Tehran-noDST   3:30   -           IRST   2022 Mar 22 00:00
                    3:30   -           IRST

上述配置意味著 ZONE “Tehran-noDST”,在 2022-03-22 00:00:00AM 之後和病房系統時間不會提前一小時(無 DST),並將保持 UTC+3:30 的時間,所以時間將是 2022-03-22 00:00:01AM 在下一秒。

有關配置參數的更多資訊,請參閱“ man zic ” 2. custom_timeZone使用(時區編譯器命令)編譯文件zic以創建 ZONE 文件。

$ zic -d . custom_timeZone

此命令將在目前工作目錄中生成一個 ZONE 文件作為“Tehran-noDST”。 3. 使用zdump commnad確認創建的 ZONE 不含 DST :

$ zdump -v Tehran-noDST
Tehran-noDST -9223372036854775808 = NULL
Tehran-noDST -9223372036854689408 = NULL
Tehran-noDST 9223372036854689407 = NULL
Tehran-noDST 9223372036854775807 = NULL
  1. 將生成的 ZONE 文件:複製*Tehran-noDST*到/usr/share/zoneinfo/Etc/目錄中(這些目錄包含所有 DST-free 時區)並取消連結舊時區並將新創建的時區連結到/etc/localtime.
$ cp Tehran-noDST /usr/share/zoneinfo/Etc/
$ chmod 644 /usr/share/zoneinfo/Etc/Tehran-noDST
$ ln -sf /usr/share/zoneinfo/Etc/Tehran-noDST /etc/localtime

注意:根據您使用的 Linux 發行版,您需要重新配置系統在啟動時使用的 ZONE(使用tzdata-update或進行配置timedatectl set-timezone Etc/Tehran-noDST);新區域的地址是Etc/Tehran-noDST

引用自:https://unix.stackexchange.com/questions/693875