我有一堆datetime对象,我想为每个对象计算从过去的固定时间(例如从1970年1月1日以来)开始的秒数。

import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)

这似乎只是区分有不同日期的日期:

t.toordinal()

如何将datetime对象转换为秒?


当前回答

来自python文档:

timedelta.total_seconds()

返回持续时间中包含的总秒数。相当于

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

启用真除法时计算。

注意,对于非常大的时间间隔(在大多数平台上超过270年),这种方法将失去微秒精度。

此功能是2.7版中的新功能。

其他回答

Int (t.strftime("%s"))也可以

将表示UTC时间的datetime对象转换为POSIX时间戳:

from datetime import timezone

seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()

将表示本地时区时间的datetime对象转换为POSIX时间戳:

import tzlocal # $ pip install tzlocal

local_timezone = tzlocal.get_localzone()
seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()

参见如何在Python中将本地时间转换为UTC ?如果tz数据库在给定平台上可用;只使用stdlib的解决方案可能有效。

如果需要<3.3 Python版本的解决方案,请参考链接。

我试了试标准图书馆的日历。Timegm,它工作得很好:

# convert a datetime to milliseconds since Epoch
def datetime_to_utc_milliseconds(aDateTime):
    return int(calendar.timegm(aDateTime.timetuple())*1000)

裁判:https://docs.python.org/2/library/calendar.html # calendar.timegm

从Python 3.3开始,使用datetime.timestamp()方法,这变得超级简单。当然,这只在您需要1970-01-01 UTC的秒数时才有用。

from datetime import datetime
dt = datetime.today()  # Get timezone naive now
seconds = dt.timestamp()

返回值将是一个浮点数,表示秒的几分之一。如果datetime是无时区的(如上例所示),则假定datetime对象表示本地时间,即从您所在位置的当前时间到UTC 1970-01-01的秒数。

Python提供了datetime操作来计算两个日期之间的差值。在你的情况下,这将是:

t - datetime.datetime(1970,1,1)

返回的值是一个timedelta对象,您可以使用成员函数total_seconds获取以秒为单位的值。

(t - datetime.datetime(1970,1,1)).total_seconds()