关于datetime:python:将年/月/日/小时/分钟/秒转换为自1970年1月1日以来的秒数

python: convert year/month/day/hour/min/second to # seconds since Jan 1 1970

我知道如何在C和Java中完成它,但是我不知道从1月1日1970世纪以来,将年/月/日/小时/分钟/秒转换为秒数的快速方法。

有人能帮我吗?

到目前为止,我已经知道了如何创建一个datetime对象,但我似乎无法获得自那个时代以来经过的时间。

(编辑:我的问题与另一个问题相反:python:seconds since epoch to relative date)


使用timetupleutctimetuple方法获取时间元组,并使用time.mktime将其转换为时间戳。

1
2
3
4
5
>>> import datetime
>>> dt = datetime.datetime(2011, 12, 13, 10, 23)
>>> import time
>>> time.mktime(dt.timetuple())
1323793380.0

有一个很好的bug与之相关,http://bugs.python.org/issue2736,这是一个有趣的阅读,任何试图转换为时间戳的人都应该阅读这个。根据那条线,正确的方法是

1
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)


您可以使用datetime.datetime(1970, 1, 1)作为参考,并从datetime.timedelta对象中获取总秒数,如下所示:

1
2
3
4
from datetime import datetime

delta = your_date - datetime(1970, 1, 1)
delta.total_seconds()


1
2
3
import calendar

calendar.timegm(datetime_object.utctimetuple())


要将日期时间对象(中断的停机时间:年/月/日/小时/分/秒)转换为自epoch以来的秒数(posix时间):

1
seconds_since_epoch = datetime_object.timestamp()

注:posix epoch为"1970年1月1日格林尼治标准时间00:00:00"。

如果datetime_object没有时区信息,那么.timestamp()方法使用本地时区。

python3.3中引入了datetime.timestamp()方法;有关在旧的python版本上工作的代码,请参见在python中将datetime.date转换为UTC时间戳。


这些行可以返回表示自epoch以来秒数的浮点数。

1
2
3
import time

time.time()