Linux
如何禁用時區的 DST 更改?
我的系統時區是亞洲/德黑蘭,它在夏季(春季向前)調整夏令時,在冬季調整;但是我確實需要禁用這些 DST 調整併將時區始終保持在 UTC+3:30。我如何在 Linux 中做到這一點?
一種可能的解決方案是創建一個自定義時區並將其應用為您的系統時區,而不是您目前的亞洲/德黑蘭時區。
- 創建一個名為的自定義 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
- 將生成的 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
。