Answers:
如果您是由于搜索引擎告诉您这是获取Unix时间戳的方法而到达此处的,请停止阅读此答案。向下滚动一个。
如果想扭转time.gmtime()
,那就想calendar.timegm()
。
>>> calendar.timegm(time.gmtime())
1293581619.0
您可以使用将字符串转换为时间元组time.strptime()
,该时间元组返回一个时间元组,您可以将其传递给calendar.timegm()
:
>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778
有关日历模块的更多信息,请点击此处
使用时间模块:
epoch_time = int(time.time())
time
使用Unix纪元(1970),很容易将其转换为UTC 。
请注意,time.gmtime
将时间戳映射0
到1970-1-1 00:00:00
。
In [61]: import time
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
time.mktime(time.gmtime(0))
给您一个时间戳,偏移的时间取决于您的语言环境,通常可能不为0。
In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0
与之相反的time.gmtime
是calendar.timegm
:
In [62]: import calendar
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0
mktime()
与一起使用gmtime()
。mktime()
接受您的当地时间,但gmtime()
返回UTC时间 -您的当地时区可能而且可能会不同。“相对于您的语言环境的时间戳”是没有意义的:POSIX时间戳并不取决于您的语言环境(本地时区),在世界范围内都是相同的值。在大多数情况下(即使在Windows上),“自纪元以来的秒数”也是POSIX时间戳-使用TAI时标的“正确”时区之类的情况并不常见。请参阅Python的time.time()是否返回本地或UTC时间戳?
mktime()
最近有一些问题。对于某些python Web服务器(例如,Tornado),由于进程继续运行,即使我更改了系统区域设置,mktime()
Web服务器API调用的仍然使用旧时区来生成时间对象。我必须切换到gmtime()
并手动应用gmt偏移量。
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()
这应该与有所不同int(time.time())
,但是可以安全地使用类似x % (60*60*24)
与时间模块不同,日期时间模块不支持leap秒。
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")
from datetime import datetime
或执行datetime.datetime.strptime