Reputation: 101
i have a time value stocked in a variable called newTime
.
when a print newTime
it givs me result like this newTime
= 0:07:00
witch is great because i like it that way.
BUT when a save the newTime
into a list
the result value becomes datetime.timedelta(seconds=14820)
so any help to save it a list in way that newTime
have a value of 0:07:00
here is my code:
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)
Upvotes: 2
Views: 2955
Reputation: 944
Like I wrote in my comment, you have to convert your datetime.timedelta object:
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'>
For your code:
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']
Upvotes: 1
Reputation: 3721
When you print an item, .__str__()
is called on that item. When you print a container, .__repr__()
gets called on each item in the container.
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']
As you can see from this last line, you can manually call str()
on each item in the container to get what you want.
Upvotes: 1