Python的fromtimestamp在不同机器上返回不一致结果

8 投票
1 回答
1948 浏览
提问于 2025-04-16 20:50

我有两台电脑,第一台的代码是:

>>> datetime.datetime.fromtimestamp(0)
datetime.datetime(1970, 1, 1, 7, 30)
>>> datetime.datetime.fromtimestamp(1309846824)
datetime.datetime(2011, 7, 5, 14, 20, 24)

第二台的代码是:

>>> datetime.datetime.fromtimestamp(0)
datetime.datetime(1970, 1, 1, 8, 0)
>>> datetime.datetime.fromtimestamp(1309846824)
datetime.datetime(2011, 7, 5, 14, 20, 24)

为什么它们在'0'这个结果上不一样,而在'1309846824'这个结果上却是一样的呢?

1 个回答

2

这里是tzdata使用的“asia”文件中的一部分。在debian或ubuntu系统上,你可以通过运行命令 apt-get source tzdata 来获取这个文件。

...
# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
Zone Asia/Kuala_Lumpur  6:46:46 -       LMT     1901 Jan  1
                        6:55:25 -       SMT     1905 Jun  1 # Singapore M.T.
                        7:00    -       MALT    1933 Jan  1 # Malaya Time
                        7:00    0:20    MALST   1936 Jan  1
                        7:20    -       MALT    1941 Sep  1
                        7:30    -       MALT    1942 Feb 16
                        9:00    -       JST     1945 Sep 12
                        7:30    -       MALT    1982 Jan  1
                        8:00    -       MYT     # Malaysia Time
...

这段内容描述了吉隆坡的时区自1901年以来是如何变化的。所以在1970年时,它是GMT+7.5,现在变成了GMT+8。

Windows系统并不使用任何形式的tzdata,所以它只知道当前的时区偏移。

撰写回答