夏令时Linux错误1970-1980

问题描述 投票:0回答:1

在1970年,我在Ubuntu机器和Windows机器上运行以下python脚本时,我得到了一个小时的时差。

$ python3 -c "
> import time
> import datetime
> print(time.strftime('%x %X%z %Z'))
> print(datetime.datetime.fromtimestamp((87*24+2)*60*60).isoformat())"

Ubuntu 16.04 / Python 3.5.2说:

04/03/17 15:37:07+0200 CEST
1970-03-29T03:00:00

Windows 10 / Python 3.5.1说:

04/03/17 15:37:06+0200 Västeuropa, sommartid
1970-03-29T04:00:00

((在Windows下,瑞典语文字表示CEST。)因此时钟是正确的,我认为时区和DST也是正确的。我认为Windows可以得到正确的结果,至少在那个时候应该发生DST。在Ubuntu上,DST直到十年后的1980年4月6日(在Windows的DST在1980年3月30日之后的一周;我也认为是正确的)才出现,但是此后一切似乎都花哨的了。

这是软件错误吗?在Python中? Ubuntu的?还是我需要以某种方式进行其他设置?我想这是一个日历怪癖,没有被Python / Windows正确地特殊设置的可能性很小?

python datetime ubuntu time epoch
1个回答
0
投票

三年后。我花了两个小时进行挖掘以找出答案。原因是当时Linux下没有时区转换数据:

$ zdump -v Europe/Stockholm -c1900,1981
Europe/Stockholm  Sun May 14 21:59:59 1916 UT = Sun May 14 22:59:59 1916 CET isdst=0 gmtoff=3600
Europe/Stockholm  Sun May 14 22:00:00 1916 UT = Mon May 15 00:00:00 1916 CEST isdst=1 gmtoff=7200
Europe/Stockholm  Sat Sep 30 22:59:59 1916 UT = Sun Oct  1 00:59:59 1916 CEST isdst=1 gmtoff=7200
Europe/Stockholm  Sat Sep 30 23:00:00 1916 UT = Sun Oct  1 00:00:00 1916 CET isdst=0 gmtoff=3600
Europe/Stockholm  Sun Apr  6 00:59:59 1980 UT = Sun Apr  6 01:59:59 1980 CET isdst=0 gmtoff=3600
Europe/Stockholm  Sun Apr  6 01:00:00 1980 UT = Sun Apr  6 03:00:00 1980 CEST isdst=1 gmtoff=7200
Europe/Stockholm  Sun Sep 28 00:59:59 1980 UT = Sun Sep 28 02:59:59 1980 CEST isdst=1 gmtoff=7200
Europe/Stockholm  Sun Sep 28 01:00:00 1980 UT = Sun Sep 28 02:00:00 1980 CET isdst=0 gmtoff=3600

谁仍然需要1917年至1979年之间的年份?计算是未来,而不是过去。 :D

© www.soinside.com 2019 - 2024. All rights reserved.