vah*_*aha 12 linux daylight-saving timezone
几周前,(土耳其能源和自然资源部)宣布 DST 将是永久性的,GMT+3 将在该国永久使用。
目前,我们 Linux 服务器的时区设置为Europe/Istanbul。但是还没有发布 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
Run Code Online (Sandbox Code Playgroud)
(在没有更新的情况下)为了防止这种情况成为危机,我们决定制定一个备份计划,将我们的服务器时区设置为固定 GMT+3;但是当设置了固定 GMT+3时,我们会遇到一个奇怪的行为。
在我们对时区进行任何更改之前,让我们看看我们服务器上的本地时间和 UTC 时间是多少。
# date
Wed Sep 21 11:13:11 EEST 2016
# date -u
Wed Sep 21 08:13:15 UTC 2016
Run Code Online (Sandbox Code Playgroud)
我们将时区设置为固定 GMT+3如下:
# rm -f /etc/localtime
# ln -s /usr/share/zoneinfo/Etc/GMT+3 /etc/localtime
Run Code Online (Sandbox Code Playgroud)
让我们看看更改后我们服务器上的本地时间和 UTC 时间是多少。GMT+3 时间比 UTC早3 小时,应该比 UTC晚3 小时,如上面的输出所示。
# date
Wed Sep 21 05:14:24 GMT+3 2016
# date -u
Wed Sep 21 08:14:26 UTC 2016
Run Code Online (Sandbox Code Playgroud)
即使我们重置本地时间或 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
Run Code Online (Sandbox Code Playgroud)
为什么偏移看起来是向后的?
vah*_*aha 12
更新 #1:最近为官方存储库下的几个操作系统发布了时区数据库更新。该版本tzdata2016g
包括上述更改的设置。
在某些时候,这个问题是在 superuser.com上提出的问题的重复。
清晰的答案是
“为了与 POSIX 标准向后兼容,像 Etc/GMT+6 这样的区域被有意反转”
但我认为不应该删除它来帮助想要在 Linux 系统中禁用 DST 更改的人。
要禁用 DST 更改,请将您的/etc/localtime
文件链接到放置在文件夹下的 zoneinfo 文件之一。/usr/share/zoneinfo/Etc/
示例命令:
# ln -s /usr/share/zoneinfo/Etc/GMT+3 /etc/localtime
Run Code Online (Sandbox Code Playgroud)
要选择最合适的 zoneinfo 文件,请反转目标 GMT 的符号。
即要设置 GMT+3 时区(比 UTC 提前 3 小时),应使用 /usr/share/zoneinfo/Etc/GMT-3