Linux 夏令时混乱

Linux 夏令时混乱

我的问题是关于夏令时 (DST),以及以下行为在 Linux 下是否正常。我使用 POSIXTZ变量来指定时区。

使用来自的示例手册页中,我将 TZ 变量设置如下:

export TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"

设置此环境变量后,我可以用来date设置时间,然后观察时钟滴答进入夏令时。效果很好(名称从 变为NZSTNZDT我们“失去”了一个小时的睡眠)。

Sun Oct  4 01:59:57 NZST 2015
Sun Oct  4 01:59:58 NZST 2015
Sun Oct  4 01:59:59 NZST 2015
Sun Oct  4 01:59:59 NZST 2015
Sun Oct  4 03:00:00 NZDT 2015
Sun Oct  4 03:00:01 NZDT 2015

但是当我将其设置date为夏令时结束之前时,我就会遇到奇怪的行为。例如,如果我这样设置时间:

date --set="20 MAR 2016 0:59:50"
Sun Mar 20 00:59:50 NZDT 2016

我们还是很好的但如果我将时钟稍微向前拨动到1:00:50(凌晨 1:00 刚过),我们就会看到一个问题:

date --set="20 MAR 2016 1:00:50"
Sun Mar 20 01:00:50 NZST 2016

我们跳出NZDT又跳回得NZST太早了。但如果我将系统设置回0:59:50并(耐心地)等待,它不会跳出太早,并且会在正确的时间NZDT回滚。NZST

这是正常的系统行为吗?

答案1

我不认为问题在于如何处理转换,而是命令中指定的时间date --set="20 MAR 2016 1:00:50"不明确。

即,该时间出现两次;第一次是在夏令时结束之前,然后是当时钟向后跳一小时时。不幸的是,我不确定如何指定需要哪个时间出现(可以包含时区以消除歧义吗?)。

相关内容