将时间戳列表从timedelta转换为可读的字符串格式

时间:2017-04-27 23:41:11

标签: python python-2.7 datetime time timedelta

我要做的是获取两个时间戳列表,找到相应时间戳对之间的差异,然后将差异打印为另一个列表。当我打印出最终的时差列表时,我得到了这个:

[datetime.timedelta(0, 2700), datetime.timedelta(0, 1800)]

以下是我的参考代码:

import time
import datetime

strlist1 = ['12:45:00', '01:30:00']
format = '%H:%M:%S'
i = 0
timelist1 = []
for time in strlist1:
    timelist1.append(datetime.datetime.strptime(strlist1[i], format))
    i += 1

strlist2 = ['12:00:00', '01:00:00']
k = 0
timelist2 = []
for time in strlist2:
    timelist2.append(datetime.datetime.strptime(strlist2[k], format))
    k += 1
list3 = [x1 - x2 for (x1, x2) in zip(timelist1, timelist2)]

另外,我对Python很新,因此非常感谢任何其他关于改进和/或改变其他方法的建设性意见。谢谢!

3 个答案:

答案 0 :(得分:1)

列表元素将使用repr,而repr通常不是人类可读的。

>>> L = [datetime.timedelta(0, 2700), datetime.timedelta(0, 1800)]
>>> L
[datetime.timedelta(0, 2700), datetime.timedelta(0, 1800)]

你想:

>>> map(str, L)  # or: [str(delta) for delta in L]
['0:45:00', '0:30:00']

答案 1 :(得分:1)

这应该为您提供更易读的格式:

[((datetime.datetime.strptime('00:00:00', format))+e).strftime(format) for e in list3]
Out[340]: ['00:45:00', '00:30:00']

答案 2 :(得分:1)

这是一个开始。在Python中,迭代序列时不需要计数器,因此不需要变量ik。正如wim所指出的,你可能想要输出的字符串表示。最后,您可以使用列表推导而不是循环生成列表。

import time
import datetime

strlist1 = ['12:45:00', '01:30:00']
format = '%H:%M:%S'
# i = 0  Not needed
timelist1 = [datetime.datetime.strptime(s, format) for s in strlist1]

strlist2 = ['12:00:00', '01:00:00']
timelist2 = [datetime.datetime.strptime(s, format) for s in strlist2]

list3 = [str(x1 - x2) for (x1, x2) in zip(timelist1, timelist2)]