Python 减去存储在两个单独列表中的datetime.time对象
我有两个列表,每个列表中始终有相等数量的对象。它们是Python 减去存储在两个单独列表中的datetime.time对象,python,list,python-2.7,datetime,subtraction,Python,List,Python 2.7,Datetime,Subtraction,我有两个列表,每个列表中始终有相等数量的对象。它们是datetime.time对象。e、 g list1 = [ Dt_Obj_1, Dt_Obj_2] list2 = [ Dt_Obj_3, Dt_Obj_4] 我总是需要用这种格式减法 list2[0] - list1[0] , list2[1] - list1[1], etc.. 我需要返回timedelta对象,因此我也一直在尝试将其放入其中: datetime.combine(datetime(1,1,1,0,0,0), dt_ob
datetime.time
对象。e、 g
list1 = [ Dt_Obj_1, Dt_Obj_2]
list2 = [ Dt_Obj_3, Dt_Obj_4]
我总是需要用这种格式减法
list2[0] - list1[0] , list2[1] - list1[1], etc..
我需要返回timedelta
对象,因此我也一直在尝试将其放入其中:
datetime.combine(datetime(1,1,1,0,0,0), dt_obj2) - datetime.combine(datetime(1,1,1,0,0,0), dt_obj1)
用列表的理解,但我似乎找不到一种方法来把这些东西放在一起,以这样的方式使它工作。此列表中最多可存储7个datetime.time()
对象,尽管我确信它很简单,我想我应该提及它以防万一。用于组合列表,并与:
我在这里用以使列表理解少一点冗长;调用comb(参数)
本质上与调用datetime.datetime.combine(datetime.date.min,参数)
相同
演示:
你可以试试这个:
import datetime
def seconds_since_midnight(time):
return 3600*time.hour + 60*time.minute + time.second
def subtract_times(t1, t2):
s1, s2 = map(seconds_since_midnight, [t1, t2])
return datetime.timedelta(seconds = s1 - s2)
result = [subtract_times(t1, t2) for t1, t2 in zip(list2, list1)]
当然,您可以将所有代码编写到单个函数中,但我选择了这种方式 我尝试了一下,我得到了这个错误
comb=partial(datetime.datetime.combine,datetime.date.min)AttributeError:type object“datetime.datetime”没有属性“datetime”
@DreamPie看看我是如何导入模块的;您从模块中导入了对象。如果您导入了类型,请删除模块引用。呜呜,谢谢。现在我得到了这个comb=partial(datetime.combine,datetime.date.min)AttributeError:“method\u descriptor”对象没有属性“min”
@DreamPie:同样,您在那里引用了错误的导入;您必须使用from datetime import date
和date.min
。谢谢,不用说partial
模块,它比我编写的减法语句更适合我。老实说,我甚至不知道它的存在。再次感谢!您忘记了微秒
。此外,将来还可以添加纳秒
(检查时间分辨率
)。您可以直接构造timedelta
(它接受小时、分钟、秒、微秒关键字参数)。使用datetime.combine(datetime.date.min,time)
是的,你是对的。我想知道为什么datetime.time对象不支持减法。
>>> import datetime
>>> from functools import partial
>>> list1 = [datetime.time(10, 20), datetime.time(13, 14)]
>>> list2 = [datetime.time(2, 15), datetime.time(4, 21)]
>>> comb = partial(datetime.datetime.combine, datetime.date.min)
>>> [comb(t1) - comb(t2) for t1, t2 in zip(list1, list2)]
[datetime.timedelta(0, 29100), datetime.timedelta(0, 31980)]
import datetime
def seconds_since_midnight(time):
return 3600*time.hour + 60*time.minute + time.second
def subtract_times(t1, t2):
s1, s2 = map(seconds_since_midnight, [t1, t2])
return datetime.timedelta(seconds = s1 - s2)
result = [subtract_times(t1, t2) for t1, t2 in zip(list2, list1)]