python datetime.timedelta 进入列表

python datetime.timedelta into a list

我有一个 时间值 存储在一个名为 newTime 的变量中。

当打印 newTime 它给我这样的结果 newTime = 0:07:00

很棒,因为我喜欢那样。

但是当将 newTime 保存到 list 中时,结果值变为 datetime.timedelta(seconds=14820)

所以任何帮助以 newTime 具有 0:07:00

的方式保存列表的方法

这是我的代码:

list = []
date_now = datetime.now()
now = date_now.strftime("%H:%M")
timeB = datetime.strptime(now, "%H:%M")

for temp in temps_arret_aller:
  timeA = datetime.strptime(temp[0], "%H:%M")

  newTime = timeA - timeB
  
  print(newtime) # 0:07:00
  list.append(newtime)
  
print(list) # datetime.timedelta(seconds=420)
  

就像我在评论中写的那样,你必须转换你的 datetime.timedelta 对象:

import datetime

new_time = datetime.time(minute=7)
print(new_time)
# >> 00:07:00
print(type(new_time))
# >> <class 'datetime.time'>

new_time_list: list = [new_time]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'datetime.time'>

new_time_list: list = [str(new_time)]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'str'>

new_time_list = [new_time.isoformat()]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'str'>

对于您的代码:

from datetime import datetime

list_dt_obj: list  = []
list_str: list = []
date_now = datetime.now()
now = date_now.strftime("%H:%M")
timeB = datetime.strptime(now, "%H:%M")

temps_arret_aller = ["00:00", "00:07", "00:14", "00:21"]

for temp in temps_arret_aller:
    timeA = datetime.strptime(temp, "%H:%M")

    newTime = timeA - timeB

    print(newTime)  # print datetime.timedelta obj: output as string
    list_dt_obj.append(newTime) # add datetime.timedelta obj
    list_str.append(str(newTime))  # toString

print(list_dt_obj)  # list of datetime.timedelta obj
print(list_str)  # list of strings

# output:
# -1 day, 10:19:00
# -1 day, 10:26:00
# -1 day, 10:33:00
# -1 day, 10:40:00
# [datetime.timedelta(-1, 37140), datetime.timedelta(-1, 37560), datetime.timedelta(-1, 37980), datetime.timedelta(-1, 38400)]
# ['-1 day, 10:19:00', '-1 day, 10:26:00', '-1 day, 10:33:00', '-1 day, 10:40:00']

当您打印一个项目时,将对该项目调用 .__str__()。当您打印一个容器时,.__repr__() 会在容器中的每个项目上被调用。

import datetime

time_delta = datetime.timedelta(seconds=1000)
print(time_delta)  # 0:16:40
print(time_delta.__str__())  # 0:16:40
print(time_delta.__repr__())  # datetime.timedelta(seconds=1000)

my_list = [time_delta, time_delta]
print(my_list)  # [datetime.timedelta(seconds=1000), datetime.timedelta(seconds=1000)]
print([str(delta) for delta in my_list])  # ['0:16:40', '0:16:40']

从最后一行可以看出,您可以对容器中的每个项目手动调用 str() 以获得您想要的。