Сравнение даты из списка, попадает ил она в диапазон дат
Получаю из базы данных список дат.
conn = sqlite3.connect(config.base_sql)
cur = conn.cursor()
cur.execute('SELECT date FROM smena')
info_sql = cur.fetchall()
cur.close()
conn.close()
И вот сейчас я пытаюсь понять, как мне сделать следующую конструкцию. У меня есть дата 1 и дата 2, я хочу узнать, попадает ли каждая дата из списка в промежуток между дата 1 и дата 2.
UPD:
из базы я получают список дат, мне необходимо вывести те даты, которые попадают в заданный промежуток.
Пример я получаю список дат:
[('13-12-2017',), ('13-12-2018',), ('13-12-2015',), ('21-12-2027',), ('21-07-2022',), ('21-07-2028',)]
Мне нудно понять, какие даты попадают в промежуток с 01.06.2022 по 01.08.2022. Промежуток будет формироваться позже автоматов за текущий месяц. Возможно есть ли какая-то библиотека, или я не вижу простого решения.
UPD2:
Видимо без парсера дат мне не обойтись.
UPD3:
Из базы я получаю следующие значения и типы:
info_sql = list [((str),tuple),((str),tuple),((str),tuple)]
т.е. внути типо list, внути контежи с str.
Ответы (1 шт):
Вы можете использовать модуль datetime
Вот пример:
import datetime
date1 = datetime.date(day=1, month=1, year=2023)
date2 = datetime.date(day=31, month=1, year=2023)
date3 = datetime.date(day=15, month=1, year=2023)
print(date1 < date3 < date2)
# Возвращает True
Если вам понадобится перевести строку в объект типа datetime.Date, вы можете воспользоваться функцией strptime, вот пример:
import datetime
print(datetime.datetime.strptime('24052010', "%d%m%Y").date())
# datetime.date(2010, 5, 24)
UPD: Чтобы преобразовать список с кортежами строк, в список с датами, вы можете использовать следующий код:
import datetime
def convert_to_date_list(str_list: list[tuple[str]]) -> list[datetime.datetime]:
return [datetime.datetime.strptime(tup[0], "%d-%m-%Y") for tup in str_list]
def in_range(date_list: list[datetime.datetime], date_from: datetime.datetime, date_to: datetime.date) -> list[datetime.datetime]:
return [date for date in date_list if date_from <= date <= date_to]
date_from = datetime.datetime(day=1, month=6, year=2022)
date_to = datetime.datetime(day=1, month=8, year=2022)
str_list = [('13-12-2017',), ('13-12-2018',), ('13-12-2015',),
('21-12-2027',), ('21-07-2022',), ('21-07-2028',)]
date_list = convert_to_date_list(str_list)
filtered = in_range(date_list, date_from, date_to)
for date in filtered:
print(date.strftime("%d-%m-%Y"))