如何创建不针对本地时间调整的unix时间戳?

时间:2010-07-23 03:00:50

标签: python timezone pytz

所以我有UTC时间的日期时间对象,我想将它们转换为UTC时间戳。问题是,time.mktime会对本地时间进行调整。

所以这里有一些代码:

import os
import pytz
import time
import datetime

epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1))
print time.mktime(epoch.timetuple())

os.environ['TZ'] = 'UTC+0'
time.tzset()
print time.mktime(epoch.timetuple())

这是一些输出:

Python 2.6.4 (r264:75706, Dec 25 2009, 08:52:16) 
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import pytz
>>> import time
>>> import datetime
>>> 
>>> epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1))
>>> print time.mktime(epoch.timetuple())
25200.0
>>> 
>>> os.environ['TZ'] = 'UTC+0'
>>> time.tzset()
>>> print time.mktime(epoch.timetuple())
0.0

所以很明显,如果系统在UTC时间没有问题,但是当它没有时,这是一个问题。设置环境变量并调用time.tzset有效但是安全吗?我不想为整个系统调整它。

还有其他办法吗?或者以这种方式调用time.tzset是安全的。

1 个答案:

答案 0 :(得分:6)

calendar模块包含calendar.timegm,可解决此问题。

calendar.timegm(元组)
  

一个不相关但很方便的函数,它接受time模块中gmtime()函数返回的时间元组,并返回相应的Unix时间戳值,假定1970年的时代,以及POSIX编码。事实上,time.gmtime()timegm()彼此是反向的。