【问题标题】:python datetime.timedelta into a listpython datetime.timedelta 到一个列表中
【发布时间】:2021-01-14 23:57:46
【问题描述】:

我有一个时间价值存储在一个名为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)
  

【问题讨论】:

  • 你能显示你的实际代码吗?
  • 我添加了我的代码。
  • 将 newTime 保存到列表中时,结果值变为 timedelta - 它与列表无关。您将两个日期时间相减,因此结果应为timedelta 请参阅第一条评论以获取如何格式化此类型的提示

标签: python python-3.x list datetime timedelta


【解决方案1】:

就像我在评论中写的,你必须转换你的 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']

【讨论】:

    【解决方案2】:

    当您打印一个项目时,会在该项目上调用.__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() 以获得您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多