我的问题:我需要将UTC时间元组转换为UTC时间戳.但我有一些困惑.
首先是一点信息:
time.mktime(tuple):此函数始终以本地时间返回时间戳.
这是localtime()的反函数.它的参数是struct_time或完整的9元组,它以当地时间而不是UTC表示时间.
calendar.timegm(tuple):这将从提供的时间元组返回UTC时间戳
获取时间模块中的gmtime()函数返回的时间元组,并返回相应的Unix时间戳值.事实上,time.gmtime()和timegm()彼此是反向的
现在让我们做一个测试:
>>> from datetime import datetime
>>> import time
>>> import calendar as cal
>>> utc_now = datetime.utcnow()
>>> now = datetime.now()
>>> utc_now
datetime.datetime(2013, 3, 16, 9, 17, 22, 489225)
>>> now
datetime.datetime(2013, 3, 16, 5, 17, 29, 736903)
>>> time.mktime(datetime.timetuple(utc_now)), time.mktime(datetime.timetuple(now))
(1363439842.0, 1363425449.0)
>>> cal.timegm(datetime.timetuple(utc_now)), cal.timegm(datetime.timetuple(now))
(1363425442, 1363411049)
Run Code Online (Sandbox Code Playgroud)
为什么有四种不同的价值观?当我想将UTC时间元组转换为UTC时间戳时,哪一个是正确的?
UPDATTE
我想我找到了我的困惑的答案,所以让我解释一下.
首先,我们需要知道重要的事情:
日期和时间对象有两种:"天真"和"意识".
知晓对象具有足够的适用算法和政治时间调整知识,例如时区和夏令时信息,以相对于其他知晓对象定位自身.知觉对象用于表示不对解释开放的特定时刻[1].
一个天真的对象不包含足够的信息来明确地相对于其他日期/时间对象定位自己.天真物体是代表协调世界时(UTC),当地时间还是某个其他时区的时间完全取决于程序,就像程序一样,特定数字代表米,英里或质量.天真的物体易于理解和使用,代价是忽略了现实的某些方面.
我们得到什么datetime.utcnow() 或是datetime.now()"天真"的对象.这意味着,datetime …