我有一堆datetime对象,我想为每个对象计算从过去的固定时间(例如从1970年1月1日以来)开始的秒数。
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
这似乎只是区分有不同日期的日期:
t.toordinal()
如何将datetime对象转换为秒?
我有一堆datetime对象,我想为每个对象计算从过去的固定时间(例如从1970年1月1日以来)开始的秒数。
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
这似乎只是区分有不同日期的日期:
t.toordinal()
如何将datetime对象转换为秒?
当前回答
我试了试标准图书馆的日历。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的秒数。
获取Unix时间(从1970年1月1日开始的秒数):
>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0
将表示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版本的解决方案,请参考链接。
Python提供了datetime操作来计算两个日期之间的差值。在你的情况下,这将是:
t - datetime.datetime(1970,1,1)
返回的值是一个timedelta对象,您可以使用成员函数total_seconds获取以秒为单位的值。
(t - datetime.datetime(1970,1,1)).total_seconds()
从datetime获取UNIX/POSIX时间并将其转换回来:
>>> import datetime, time
>>> dt = datetime.datetime(2011, 10, 21, 0, 0)
>>> s = time.mktime(dt.timetuple())
>>> s
1319148000.0
# and back
>>> datetime.datetime.fromtimestamp(s)
datetime.datetime(2011, 10, 21, 0, 0)
请注意,不同的时区对结果有影响,例如,我当前的TZ/DST返回:
>>> time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple())
-3600 # -1h
因此应该考虑使用UTC版本的函数归一化为UTC。
注意,前面的结果可用于计算当前时区的UTC偏移量。在本例中,这是+1h,即UTC+0100。
引用:
datetime.date.timetuple time.mktime datetime.datetime.fromtimestamp 时间模块的介绍解释了POSIX时间,1970年纪元,UTC, TZ, DST…