减去存储在两个单独列表中的datetime.time对象

时间:2014-08-17 03:14:31

标签: 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_obj2) - datetime.combine(datetime(1,1,1,0,0,0), dt_obj1)

使用列表推导但我似乎无法找到一种方法将这些东西组合在一起以使其工作。这个列表中最多可以存储7个datetime.time()个对象,虽然我确定它是微不足道的,我认为我应该提一下以防万一。

2 个答案:

答案 0 :(得分:4)

使用zip()合并列表,datetime.datetime.combine()datetime.date.min合并:

import datetime
from functools import partial

comb = partial(datetime.datetime.combine, datetime.date.min)

result = [comb(t1) - comb(t2) for t1, t2 in zip(list1, list2)]

我在这里使用functools.partial()来使列表理解稍微简单一些;调用comb(argument)实质上与调用datetime.datetime.combine(datetime.date.min, argument)相同。

演示:

>>> 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)]

答案 1 :(得分:0)

你可以试试这个:

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)]

当然,您可以将所有代码写入单个函数,但我选择这样做。