最好使用datetime.datetime.strptime()
function,然后减去两个结果:
import datetime
date1, time1 = '2012-09-08', '12:23:33'
date2, time2 = '2012-09-08', '12:23:33'
dt1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
dt2 = datetime.datetime.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")
print (dt1 - dt2).total_seconds()
请注意,datetime.timedelta.seconds
仅以秒为单位提供余数,还有一个.days
属性。改为使用.total_seconds()
它会更方便,并且无需考虑.days
价值。
使用该datetime.datetime.strptime()
方法,加上timedelta
方法,将大部分工作保留在 C 代码中,并且应该更快。
请注意,由于解析步骤,这两种方法都不是非常快。时间测试:
>>> import timeit
>>> def parse_datetime():
... date1, time1 = '2012-09-08', '12:23:33'
... date2, time2 = '2012-09-08', '12:23:33'
... dt1 = datetime.datetime.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
... dt2 = datetime.datetime.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")
... (dt1 - dt2).total_seconds()
...
>>> def parse_time():
... d1 = time.strptime(date1 + ' ' + time1, "%Y-%m-%d %H:%M:%S")
... d2 = time.strptime(date2 + ' ' + time2, "%Y-%m-%d %H:%M:%S")
... seconds1 = time.mktime(d1)
... seconds2 = time.mktime(d2)
... seconds1 - seconds2
...
>>> timeit.timeit('test()', 'from __main__ import parse_datetime as test', number=10000)
0.6590030193328857
>>> timeit.timeit('test()', 'from __main__ import parse_time as test', number=10000)
0.7742340564727783
第二种方法只使用time.strptime()
函数(直接输出一个时间元组)。
我知道,没有更快的方法来解析日期时间字符串。