ilyesBourouba
ilyesBourouba

Reputation: 101

python datetime.timedelta into a list

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

Answers (2)

droebi
droebi

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

FiddleStix
FiddleStix

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

Related Questions