Python:将年/月/日/小时/分钟/秒转换为自1970年1月1日以来的#秒

8
我知道如何在C和Java中完成,但我不知道将年/月/日/小时/分/秒快速转换为自1970年1月1日时期以来的秒数的方法。
有人能帮助我吗?
到目前为止,我已经想出了如何创建一个datetime对象, 但我似乎无法获得自时期以来经过的秒数。
(编辑:我的问题与另一个问题相反:Python: Seconds since epoch to relative date
5个回答

13

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

>>> import datetime
>>> dt = datetime.datetime(2011, 12, 13, 10, 23)
>>> import time
>>> time.mktime(dt.timetuple())
1323793380.0

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

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

只有在dt是本地时间时,mktime()才能正常工作。如果dt是表示UTC时间的naive datetime对象,则“正确的方法”才有效(如果dt是本地时间,则该方法是错误的)。请参见Converting datetime.date to UTC timestamp in Python - jfs

7

你可以使用 datetime.datetime(1970, 1, 1) 作为参考,以下是从 datetime.timedelta 对象获取总秒数的方法:

from datetime import datetime

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

2
它假设 your_date 是UTC日期。 - jfs

3
import calendar

calendar.timegm(datetime_object.utctimetuple())

1
如果datetime_object没有附加时区信息,那么utctimetuple()会默默地失败,除非datetime_object已经表示UTC时间。 - jfs

1

这些代码可以返回一个浮点数,表示自纪元以来的秒数。

import time

time.time()

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接