Python2 vs Python3:从时间戳转换为日期时间时的结果不同

时间:2018-11-01 06:50:05

标签: python python-3.x datetime

我正在尝试将一些代码从python2移植到python3。 使用日期/时间操作转换某些代码时遇到麻烦。

  

Python2.7

Python 2.7.13 (default, Apr 19 2017, 02:44:33) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import os
>>> os.environ['TZ'] = 'UTC'
>>> datetime.datetime.fromtimestamp(1461085831)
datetime.datetime(2016, 4, 19, 17, 10, 31)
  

Python3.6

Python 3.6.1 (default, Apr 19 2017, 21:58:41) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import os
>>> os.environ['TZ'] = 'UTC'
>>> datetime.datetime.fromtimestamp(1461085831)
datetime.datetime(2016, 4, 19, 22, 40, 31)

python2 = (2016, 4, 19, 17, 10, 31)的结果,而python3 = (2016, 4, 19, 22, 40, 31)的结果。 为什么会有这种区别,我该如何克服呢?

1 个答案:

答案 0 :(得分:6)

这有点棘手。据我所知,这仅在python 3.6中发生。简而言之,您需要在设置TZ环境之后调用time.tzset。我曾经遇到过它(我不记得了),,而且我没有3.6之前的python测试,所以请耐心等待。我刚刚在同事的python3.5上检查了此问题,它可以按预期运行(无需放置time.tzset()

time.tzset文档说:

  

重置库例程使用的时间转换规则。环境变量TZ指定如何完成此操作。它还将变量tzname(来自TZ环境变量),时区(UTC以西的非DST秒),altzone(UTC以西的DST秒)和夏时制(如果此时区没有任何夏令时规则,则设置为0)。 ,如果采用夏令时,则有一个时间,过去,现在或将来,则为非零)。

只需输入time.tzset()

See the results

编辑:我刚刚进行了一些搜索,(错误地)将此行为报告为错误:datetime in Python 3.6+ no longer respects 'TZ' environment variable