无法找出python中的TZ问题

时间:2018-12-22 01:10:11

标签: python time environ

我不明白python如何计算时间。似乎与我不一致。

我的服务器时间是:

admin@httstools ~ $ date
Fri Dec 21 17:00:51 PST 2018

在python解释器中,我得到了预期的结果(即2018-12-21):

admin@httstools ~ $ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> import datetime
>>> str(datetime.date.today())
'2018-12-21'
>>>

但是,如果我搞错了时区,事情就会变得很棘手:

>>> time.tzname[time.localtime().tm_isdst]
'PST'

PST是正确的时区。但是,如果我将环境设置为该TZ,然后再次运行上一个命令,则会得到一个不同的日期,这显然是不正确的:

>>> os.environ['TZ'] = time.tzname[time.localtime().tm_isdst]
>>> str(datetime.date.today())
'2018-12-22'
>>>

预期结果为2018年12月21日,TZ变量设置为“ PST”。

作为后续,我可以在python中运行什么命令,该命令将始终根据我的位置返回正确的日期/时间。

1 个答案:

答案 0 :(得分:2)

这是我对正在发生的事情的猜测(目前我没有要测试的Linux系统)。

如果您检查TZ环境变量,您会发现它实际上应该是语法“ America / Pacific”而不是“ PST”(PST只是用于打印目的的缩写)。当通过TZ环境变量传递无效值时,我猜测Python作为合理的默认值回落到UTC。

太平洋标准时间下午5:00的UTC时间恰好是第二天的午夜,这就是为什么您得到另一个日期的原因。