列表中日期时间之间的差异

时间:2019-06-20 20:04:36

标签: python datetime

我有一个名为times的列表,其中包含python中的日期时间值。我想将列表中的每个其他值与其前一个值之间的差值考虑在内。例如,我有

[datetime.time(0, 0), datetime.time(7, 51, 10), datetime.time(7, 51, 20), datetime.time(12, 51, 50), datetime.time(12, 52), datetime.time(16, 34, 30)]

我希望在同一列表或新列表中填充以下值:

[datetime.time(7,51,10) - datetime.time(0, 0, 0), datetime.time(12, 51, 50) - datetime.time(7, 51, 20), datetime.time(16, 34, 30) - datetime.time(12, 52, 0)]

我认为我需要使用for循环遍历原始列表,并使用timedelta执行计算。

这是我对for循环的设置:

for i in times:
     (something with timedelta between i+1 from i)
     i+2

有人从哪里开始有什么建议吗?

编辑:

我想出了如何从datetime.time转换为datetime.datetime。看起来像这样:

dt = []
for i in times:
    dt.append(datetime.combine(date.today(), i))

print(dt)

此数组现在作为日期时间。我想我现在可以弄清楚如何在这些值之间进行timedelta了,但我仍然希望有人提出任何建议。

2 个答案:

答案 0 :(得分:1)

我建议使用理解力来解决这个问题。

import datetime

times = [datetime.time(0, 0), datetime.time(7, 51, 10), datetime.time(7, 51, 20), datetime.time(12, 51, 50), datetime.time(12, 52), datetime.time(16, 34, 30)]

base_date = datetime.date.min

datetimes = [datetime.datetime.combine(base_date, time) for time in times]
starts = datetimes[::2]
ends = datetimes[1::2]

timedeltas = [end - start for start, end in zip(starts, ends)]

在这里,我们通过使用列表推导并将日期时间列表的两个局部视图压缩在一起来避免使用for循环。

此解决方案假定所有时间都在同一天发生,并且该列表非空。

答案 1 :(得分:1)

我想最简单的方法是:

import numpy as np

res = np.diff(dt)[::2]

其中dt是datetime.datetime(s)的转换列表。 res中的结果是

array([datetime.timedelta(0, 28270), datetime.timedelta(0, 18030),
       datetime.timedelta(0, 13350)], dtype=object)