αғsнιη Asked: 2022-03-11 04:39:59 +0800 CST2022-03-11 04:39:59 +0800 CST 2022-03-11 04:39:59 +0800 CST 如何禁用时区的 DST 更改? 772 我的系统时区是亚洲/德黑兰,它在夏季(春季向前)调整夏令时,在冬季调整;但是我确实需要禁用这些 DST 调整并将时区始终保持在 UTC+3:30。我如何在 Linux 中做到这一点? linux timezone 1 个回答 Voted Best Answer αғsнιη 2022-03-11T04:39:59+08:002022-03-11T04:39:59+08:00 从2022 年 9 月 22 日起,伊朗将取消夏令时,全年遵守标准时间。官方软件包也在 IANA 的 [tzdata2022b.tar.gz] 软件包中发布了这些更新,因此这里是如何应用亚洲/德黑兰地区时区更新的方法。 下载tzdata2022b.tar.gz包并解压(你应该是root用户);查看所有软件包。 # tar -xzvf tzdata2022b.tar.gz 编译以通过“zic”(时区编译器)命令为感兴趣的区域(亚洲)应用系统时区数据的更新: # zic asia 注意:更改将直接应用于亚洲/德黑兰以及亚洲其他地区。 使用以下命令验证更新是否正确应用并且 DST 已禁用(请注意,在 'Wed Sep 21 23:59:59' 之后(回退到 +0330 作为伊朗标准时间)和之后的日期不会发生 DST 调整): # zdump -v Asia/Tehran | grep '202[2-9]' 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 /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 有关配置参数的更多信息,请参阅“ man zic ” 编译以通过“zic”命令应用亚洲/德黑兰时区的更新: $ zic Tehran_timeZone /etc/localtime使用以下命令将本地时间与更正的时区信息重新链接: # zic -l Asia/Tehran 注意:根据您使用的 Linux 发行版,您需要重新配置系统在启动时使用的 ZONE(使用tzdata-update或进行配置timedatectl set-timezone Asia/Tehran) 注意:用户/shell 级别 timeZone默认情况下,在用户/shell 级别显示日期和时间时使用相同 的命令,但是如果变量设置为不同的值,那么它将从该变量读取并应用 timeZone ,因此您需要取消设置/删除它或将其设置为用户级别外壳配置文件中的当前位置;这是一个命令,用于查找可能在用户主目录下的这些文件中设置的变量:date/etc/localtimeTZTZTZ='Asia/Tehran'TZ # find /home/ -maxdepth 2 -type f -exec grep -wH 'TZ' {} + 注意:您需要为系统范围的 shell 配置文件更新相同的内容。
从2022 年 9 月 22 日起,伊朗将取消夏令时,全年遵守标准时间。官方软件包也在 IANA 的 [tzdata2022b.tar.gz] 软件包中发布了这些更新,因此这里是如何应用亚洲/德黑兰地区时区更新的方法。
下载tzdata2022b.tar.gz包并解压(你应该是root用户);查看所有软件包。
编译以通过“zic”(时区编译器)命令为感兴趣的区域(亚洲)应用系统时区数据的更新:
注意:更改将直接应用于亚洲/德黑兰以及亚洲其他地区。
使用以下命令验证更新是否正确应用并且 DST 已禁用(请注意,在 'Wed Sep 21 23:59:59' 之后(回退到 +0330 作为伊朗标准时间)和之后的日期不会发生 DST 调整):
# zdump -v Asia/Tehran | grep '202[2-9]' 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
/etc/localtime
使用以下命令将本地时间与更正的时区信息重新链接:验证
date
并hwclock
报告正确的日期和时间。以下是如何仅构建和应用特定国家/地区时区更新的解决方案(此答案中为亚洲/德黑兰)。
创建一个名为的自定义 ZONE 文件
Tehran_timeZone
并在下面添加区域信息(每个国家/地区的规则和区域信息可以在 tzdata2022b.tar.gz 包中的相关区域文件中找到):有关配置参数的更多信息,请参阅“ man zic ”
编译以通过“zic”命令应用亚洲/德黑兰时区的更新:
/etc/localtime
使用以下命令将本地时间与更正的时区信息重新链接:注意:根据您使用的 Linux 发行版,您需要重新配置系统在启动时使用的 ZONE(使用
tzdata-update
或进行配置timedatectl set-timezone Asia/Tehran
)注意:用户/shell 级别 timeZone默认情况下,在用户/shell 级别显示日期和时间时使用相同
的命令,但是如果变量设置为不同的值,那么它将从该变量读取并应用 timeZone ,因此您需要取消设置/删除它或将其设置为用户级别外壳配置文件中的当前位置;这是一个命令,用于查找可能在用户主目录下的这些文件中设置的变量:
date
/etc/localtime
TZ
TZ
TZ='Asia/Tehran'
TZ
注意:您需要为系统范围的 shell 配置文件更新相同的内容。