我有一堆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对象转换为秒?
当前回答
对于1970年1月1日这个特殊的日子,有多种选择。
对于任何其他开始日期,您需要以秒为单位获得两个日期之间的差异。减去两个日期会得到一个timedelta对象,从Python 2.7开始,它有一个total_seconds()函数。
>>> (t-datetime.datetime(1970,1,1)).total_seconds()
1256083200.0
开始日期通常以UTC为单位指定,因此为了得到正确的结果,您输入到这个公式中的日期时间也应该以UTC为单位。如果datetime还不是UTC,那么在使用它之前需要转换它,或者附加一个具有适当偏移量的tzinfo类。
正如评论中提到的,如果你在datetime上附加了一个tzinfo,那么你也需要在起始日期上添加一个tzinfo,否则减法将失败;对于上面的例子,我将添加tzinfo=pytz。如果使用python2,则使用tzinfo=timezone。如果使用Python 3。
其他回答
获取Unix时间(从1970年1月1日开始的秒数):
>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0
在python 3中,以毫秒为单位计算一个代码块的处理时间的标准方法。X表示:
import datetime
t_start = datetime.datetime.now()
# Here is the python3 code, you want
# to check the processing time of
t_end = datetime.datetime.now()
print("Time taken : ", (t_end - t_start).total_seconds()*1000, " ms")
我试了试标准图书馆的日历。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
将表示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版本的解决方案,请参考链接。
对于1970年1月1日这个特殊的日子,有多种选择。
对于任何其他开始日期,您需要以秒为单位获得两个日期之间的差异。减去两个日期会得到一个timedelta对象,从Python 2.7开始,它有一个total_seconds()函数。
>>> (t-datetime.datetime(1970,1,1)).total_seconds()
1256083200.0
开始日期通常以UTC为单位指定,因此为了得到正确的结果,您输入到这个公式中的日期时间也应该以UTC为单位。如果datetime还不是UTC,那么在使用它之前需要转换它,或者附加一个具有适当偏移量的tzinfo类。
正如评论中提到的,如果你在datetime上附加了一个tzinfo,那么你也需要在起始日期上添加一个tzinfo,否则减法将失败;对于上面的例子,我将添加tzinfo=pytz。如果使用python2,则使用tzinfo=timezone。如果使用Python 3。