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

231 投票
6 回答
475397 浏览
提问于 2025-04-16 09:08

如何实现gmtime()的反向操作,也就是输入时间和日期,得到秒数呢?

我有一些字符串,比如'Jul 9, 2009 @ 20:02:58 UTC',我想计算从1970年1月1日到2009年7月9日之间的秒数。

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

6 个回答

10

注意,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
861

使用 time 模块:

import time    
epoch_time = int(time.time())
156

如果你是通过搜索引擎找到这里的,因为它告诉你这是获取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

关于日历模块的更多信息可以在 这里 找到。

撰写回答