我的问题是关于夏令时 (DST),以及以下行为在 Linux 下是否正常。我使用 POSIXTZ
变量来指定时区。
使用来自的示例这手册页中,我将 TZ 变量设置如下:
export TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"
设置此环境变量后,我可以用来date
设置时间,然后观察时钟滴答进入夏令时。效果很好(名称从 变为NZST
,NZDT
我们“失去”了一个小时的睡眠)。
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"
不明确。
即,该时间出现两次;第一次是在夏令时结束之前,然后是当时钟向后跳一小时时。不幸的是,我不确定如何指定需要哪个时间出现(可以包含时区以消除歧义吗?)。