关于python:如何从gmtime()的时间+日期输出中获取自纪元以来的秒数?

How to get the seconds since epoch from the time + date output of gmtime()?

你如何将时间+日期和秒数倒过来?

我有类似于'Jul 9, 2009 @ 20:02:58 UTC'的字符串,我想返回从新纪元到2009年7月9日的秒数。

我试过time.strftime,但我不知道如何正确地使用它,或者它是否是正确的命令。


使用时间模块:

1
epoch_time = int(time.time())


你要的是calendar.timegm()

1
2
>>> calendar.timegm(time.gmtime())
1293581619.0

您可以使用time.strptime()将字符串转换为时间元组,它返回一个可以传递给calendar.timegm()的时间元组:

1
2
3
4
>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

此处显示有关日历模块的详细信息


注意,time.gmtime将时间戳0映射到1970-1-1 00:00:00

1
2
3
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。

1
2
In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

time.gmtime的倒数为calendar.timegm

1
2
3
In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0


1
2
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()

这应该与int(time.time())有所不同,但使用类似x % (60*60*24)的东西是安全的。

日期时间-基本日期和时间类型:

Unlike the time module, the datetime module does not support leap seconds.


1
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")


根据原始时间戳,有两种方法:

mktime()timegm()

http://docs.python.org/library/time.html网站