在 Linux 中禁用夏令时 (DST) 更改

在 Linux 中禁用夏令时 (DST) 更改

几周前,土耳其能源与自然资源部宣布,夏令时将永久实施,该国将永远使用 GMT+3。

目前,我们的 Linux 服务器的时区设置为欧洲/伊斯坦布尔。但尚未发布 tzdata 更新。

由于缺乏更新,时区将于 2016 年 10 月 30 日自动从 GMT+3 更改为 GMT+2,如 zoneinfo 文件 (/usr/share/zoneinfo/Europe/Istanbul) 中声明的那样。

2016 年的详情如下:

# zdump -v /usr/share/zoneinfo/Europe/Istanbul | grep 2016
/usr/share/zoneinfo/Europe/Istanbul  Sun Mar 27 00:59:59 2016 UT = Sun Mar 27 02:59:59 2016 EET isdst=0 gmtoff=7200
/usr/share/zoneinfo/Europe/Istanbul  Sun Mar 27 01:00:00 2016 UT = Sun Mar 27 04:00:00 2016 EEST isdst=1 gmtoff=10800
/usr/share/zoneinfo/Europe/Istanbul  Sun Oct 30 00:59:59 2016 UT = Sun Oct 30 03:59:59 2016 EEST isdst=1 gmtoff=10800
/usr/share/zoneinfo/Europe/Istanbul  Sun Oct 30 01:00:00 2016 UT = Sun Oct 30 03:00:00 2016 EET isdst=0 gmtoff=7200

(在没有更新的情况下)为了防止这种情况演变成危机,我们决定制定一个备用计划,即将我们的服务器的时区设置为固定 GMT+3;但我们面临一个奇怪的行为时固定 GMT+3已设置。

在对时区进行任何更改之前,让我们先看看服务器上的本地时间和 UTC 时间是多少。

# date
Wed Sep 21 11:13:11 EEST 2016
# date -u
Wed Sep 21 08:13:15 UTC 2016

我们将时区设置为固定 GMT+3如下:

# rm -f /etc/localtime
# ln -s /usr/share/zoneinfo/Etc/GMT+3 /etc/localtime

我们来看看更改后我们服务器上的本地时间和 UTC 时间是多少。GMT+3 时间为 3 小时较早比 UTC 晚 3 个小时之后比 UTC,如上面的输出所示。

# date
Wed Sep 21 05:14:24 GMT+3 2016
# date -u
Wed Sep 21 08:14:26 UTC 2016

即使我们重置当地时间或 UTC 时间,它也不会改变。

# date -s "21 Sep 2016 11:16:00"
Wed Sep 21 11:16:00 GMT+3 2016
# date
Wed Sep 21 11:16:02 GMT+3 2016
# date -u
Wed Sep 21 14:16:05 UTC 2016

# date -u -s "21 Sep 2016 11:16:00"
Wed Sep 21 11:16:00 UTC 2016
# date
Wed Sep 21 08:16:01 GMT+3 2016
# date -u
Wed Sep 21 11:16:02 UTC 2016

为什么偏移看起来是向后的?

答案1

更新#1:时区数据库更新最近已在多个操作系统的官方存储库下发布。该版本tzdata2016g包含针对上述更改的设置。

在某种程度上,这个问题是在 superuser.com 上提出的问题

明确的答案是

“Etc/GMT+6 等区域被故意反转,以便向后兼容 POSIX 标准”

但我认为不应该删除它以帮助那些想要在 Linux 系统中禁用 DST 更改的人。

禁用 DST 更改,将您的/etc/localtime文件链接到位于文件夹下的 zoneinfo 文件之一/usr/share/zoneinfo/Etc/

示例命令:

# ln -s /usr/share/zoneinfo/Etc/GMT+3 /etc/localtime

选择最合适的 zoneinfo 文件,反转目标 GMT 的符号。

例如,要设置 GMT+3 时区(比 UTC 早 3 小时),应使用 /usr/share/zoneinfo/Etc/GMT-3

答案2

某个时候,TZ 表的新修订版将会发布,并可用于所有 Linux 发行版的更新。嗯……我本来可以保证,在宣布解决这个问题后不久,更新的时区表就已经可用了。也许有一个新的 TZ 指示符适合您的情况。

相关内容