Search code examples
pythondatedatetimetimepython-datetime

How to compare a date from a list with todays date?


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?


Solution

  • 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.