我正在尝试将一些代码从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)
的结果。
为什么会有这种区别,我该如何克服呢?
答案 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()
:
编辑:我刚刚进行了一些搜索,(错误地)将此行为报告为错误:datetime in Python 3.6+ no longer respects 'TZ' environment variable