I am trying to compare a list of dates, with the date and time of now.
I take this string (just a quick example) from a remote SSH command:
Mon Jun 15 16:52:18 2020,Mon Jun 15 16:52:35 2020,Mon Jun 15 16:52:29 2020 ...
Date and time of now:
now = datetime.now()
Then I convert the original format of now, to the same of my string:
nowform = now.strftime("%a %b %d %H:%M:%S %Y")
The output is just what I need:
Wed Jun 17 13:26:39 2020
But now there is the problem, I have tried changing the format of my list items to datetime items, as you can see here:
dates_1 = str(re.findall('(Mon.*|Sun.*|Tue.*|Wed.*|Thu.*|Fri.*|Sat.*|Sun.*)', output)).replace("\\r", "").replace(" '", "'").replace("'", "").replace("[", "").replace("]", "")#.replace(",", ";").replace(" ; ", ";")
print(dates_1)
dateslist = dates_1.split(",")
dates_list = [dt.datetime.strptime(date, "%a %b %d %H:%M:%S %Y").date() for date in dateslist]
print (dates_list)
And then I try to take the difference (on days):
delta = nowform - dates_list
print(delta.days)
The output of dates_list is this one
[datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 17), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 17), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 13), datetime.date(2020, 6, 13), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 16), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 1), datetime.date(2020, 6, 1), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 8), datetime.date(2020, 6, 10), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 11), datetime.date(2020, 4, 23), datetime.date(2020, 6, 15), datetime.date(2020, 6, 16), datetime.date(2020, 5, 21), datetime.date(2020, 6, 1), datetime.date(2020, 6, 17), datetime.date(2020, 6, 14), datetime.date(2020, 6, 16), datetime.date(2020, 6, 15), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 5, 12), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 6, 12), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 6, 16), datetime.date(2020, 6, 15), datetime.date(2020, 6, 16), datetime.date(2020, 6, 15), datetime.date(2020, 6, 16), datetime.date(2020, 6, 15), datetime.date(2020, 6, 16), datetime.date(2020, 6, 11), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2017, 8, 21), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 5, 23), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 14), datetime.date(2020, 6, 15), datetime.date(2020, 6, 12), datetime.date(2020, 6, 14), datetime.date(2018, 9, 12), datetime.date(2019, 10, 21), datetime.date(2020, 1, 29), datetime.date(2020, 1, 29), datetime.date(2019, 8, 1), datetime.date(2019, 8, 20), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17), datetime.date(2020, 6, 17)]
But it is returning this error:
TypeError: unsupported operand type(s) for -: 'str' and 'list'
How is it possible that I can not compare all that values if I changed the format?
First of all, you cannot subtract a list of datetime objects dates_list
from a string nowform
. Second, you need to work with either datetime.date
or datetime.datetime
, not a mix of both. Then you can calculate the timedelta
as e.g.
import datetime
# today's date:
now = datetime.datetime.now().date()
# simulating your dates_list:
dates_list = [datetime.date(2020, 6, 15), datetime.date(2020, 6, 15), datetime.date(2020, 6, 15)]
deltas = [now-d for d in dates_list]
# deltas
# [datetime.timedelta(days=2),
# datetime.timedelta(days=2),
# datetime.timedelta(days=2)]
delta_days = [td.days for td in deltas]
# delta_days
# [2, 2, 2]
Note that both now
and dates_list
have the same data type, i.e. datetime.date
. If you want to work with Python lists, you also need to use list comprehensions to get the output you want.