Сравнение даты из списка, попадает ил она в диапазон дат

Рейтинг: -1Ответов: 1Опубликовано: 18.04.2023

Получаю из базы данных список дат.

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.

Ответы

▲ 2Принят

Вы можете использовать модуль 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"))