Разница времени между двумя датами

Рейтинг: 0Ответов: 2Опубликовано: 09.01.2023

Мне нужно сделать кд на команду, чтобы нельзя было писать команду чаще, чем раз в 30 минут. Дату и время первого ввода команды буду сохранять в бд, ну с этим я сам разберусь. Я не могу найти разницу в 30 минут между предыдущим отправлением и текущим, получаю всякие ошибки по типу TypeError: '>' not supported between instances of 'datetime.timedelta' and 'datetime.time' и тд.. Я понял как найти разницу между 1 датой и временем и 2, но как ее сравнить с 30 минутами?

first_message_date = 2023-01-10 01:03:12 
second_message_date = 2023-01-10 01:03:07
print(first_message_date - second_message_date)
0:00:05

Как мне сравнить эту разницу с 30 минутами. Я понял, что 30 минут это

print(datetime.time(0, 30, 0))
00:30:00

Но я не понимаю, как мне сравнить эти 2 даты с временем. Поэтому вопрос такой, как сравнить 2 даты , если разница больше 30 минут, то, к примеру, вывести True, если меньше, то False.

Ответы

▲ 2

Для сравнения дат используется класс timedelta. Любая арифметическая операция между двумя объектами класса datetime возвращает объект класса timedelta.

В результате, имеем следующий код:

from datetime import datetime, timedelta

first_message_date = datetime(2023, 1, 10, 1, 3, 12)
second_message_date = datetime(2023, 1, 10, 1, 3, 7)
third_message_date = datetime(2023, 1, 10, 1, 34, 7)

delta_time = timedelta(minutes=30)

print(second_message_date - first_message_date > delta_time)
print(third_message_date - first_message_date > delta_time)
▲ 0

Я бы вообще на вашем месте не юзал бы datetime, а использовал бы unix-время, например, через time

Тогда дату можно будет хранить как простое число, да и к/д на команду будет задать проще. Пример:

import time

last_invoke: int = 12345  # время вызова старой команды, из бд

is_on_timeout: bool = (last_invoke + 1800) > time.time()  # 1800 - 30 мин. в сек.

Время в БД можно будет сохранять просто как INTEGER, что вроде бы даже будет поэкономичнее (поправьте если не прав).