【问题标题】:How do I create a unix timestamp that doesn't adjust for localtime?如何创建不针对本地时间进行调整的 unix 时间戳?
【发布时间】:2011-03-19 21:49:37
【问题描述】:

所以我有 UTC 时间的 datetime 对象,我想将它们转换为 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 是否安全。

【问题讨论】:

    标签: python timezone pytz


    【解决方案1】:

    calendar 模块包含解决此问题的calendar.timegm

    calendar.timegm(元组)

    一个不相关但方便的函数,它采用时间元组,例如由 time 模块中的 gmtime() 函数返回,并返回相应的 Unix 时间戳值,假设 1970 年和 POSIX 编码。事实上,time.gmtime()timegm() 是彼此的倒数。

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多