Как сравнить дату из списка с сегодняшней датой? - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь сравнить список дат с текущей датой и временем.

Я беру эту строку (просто быстрый пример) из удаленной команды S SH:

Mon Jun 15 16:52:18 2020,Mon Jun 15 16:52:35 2020,Mon Jun 15 16:52:29 2020 ...

Дата и время сейчас:

now = datetime.now()

Затем я конвертирую исходный формат сейчас в тот же, что и моя строка :

nowform = now.strftime("%a %b %d %H:%M:%S %Y")

Результат - именно то, что мне нужно:

Wed Jun 17 13:26:39 2020

Но теперь возникла проблема, я попытался изменить формат элементов моего списка на элементы datetime , как вы можете видеть здесь:

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)

И затем я пытаюсь взять разницу (по дням):

delta = nowform - dates_list
print(delta.days)

Результат date_list - это

[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)]

Но он возвращает эту ошибку:

TypeError: unsupported operand type(s) for -: 'str' and 'list'

Как это возможно, что я не могу сравнить все эти значения, если я изменил формат?

1 Ответ

1 голос
/ 17 июня 2020

Прежде всего, вы не можете вычесть список объектов datetime dates_list из строки nowform. Во-вторых, вам нужно работать либо с datetime.date, либо с datetime.datetime, а не с их сочетанием. Затем вы можете вычислить timedelta как, например,

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]

Обратите внимание, что оба now и dates_list имеют один и тот же тип данных, то есть datetime.date. Если вы хотите работать со списками Python, вам также необходимо использовать составления списков, чтобы получить желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...