【发布时间】:2011-05-31 17:24:56
【问题描述】:
你如何反向gmtime(),你把时间+日期放在哪里,得到秒数?
我有'Jul 9, 2009 @ 20:02:58 UTC' 之类的字符串,我想返回从纪元到 2009 年 7 月 9 日之间的秒数。
我尝试过time.strftime,但我不知道如何正确使用它,或者它是否是正确使用的命令。
【问题讨论】:
你如何反向gmtime(),你把时间+日期放在哪里,得到秒数?
我有'Jul 9, 2009 @ 20:02:58 UTC' 之类的字符串,我想返回从纪元到 2009 年 7 月 9 日之间的秒数。
我尝试过time.strftime,但我不知道如何正确使用它,或者它是否是正确使用的命令。
【问题讨论】:
使用time 模块:
epoch_time = int(time.time())
【讨论】:
time 使用 Unix 纪元(1970),则很容易将其转换为 UTC。
time.time() 值不依赖于本地时区(如果我们排除“正确”时区等),例如,如果它返回 POSIX 时间(因为它在大多数系统)然后它是自纪元(1970-01-01UTC)以来的 SI 秒数,不包括闰秒。此值可以转换为 UTC(不包括闰秒),但它不是 UTC。 @MarlonAbeykoon:我喜欢this answer
如果您来到这里是因为搜索引擎告诉您这是获取 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
更多关于日历模块here
【讨论】:
time.time()
请注意,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 时标的“正确”时区并不常见。见Does Python's time.time() return the local or UTC timestamp?
mktime() 的问题。对于某些python web服务器(例如Tornado),由于进程一直在运行,即使我改变了系统区域设置,web服务器API调用的mktime()仍然使用旧时区来生成时间对象。我必须切换到 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)之类的东西是安全的
datetime — Basic date and time types:
与时间模块不同,日期时间模块不支持闰秒。
【讨论】:
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")
【讨论】:
from datetime import datetime要么做datetime.datetime.strptime
【讨论】: