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

Convert list of time stamps from timedelta to readable string format

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

[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 还很陌生,因此非常感谢任何其他关于改进 and/or 改变任何其他内容的建设性意见。谢谢!

列表元素将使用 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']

这应该会给你一个更易读的格式:

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

这是一个开始。在 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)]