'datetime.timedelta' object has no attribute 'strftime'

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

Есть такой код на проверку комментариев.


if user.last_comment <= datetime.now():
    user.balance += 4
    user.last_comment = datetime.now() + timedelta(hours=3)
    user.save()
    await user.reply(f'{user.mention()}, награда за коментарий +4 <3.', only_user=True)

else:
    time = datetime.now() - user.last_comment
    await user.reply(f'{user.mention()}, вы уже оставляли коментарий! Попробуйте через {time.strftime("%H:%M:%S")}', only_user=True)

При написании комментария бот крашится и пишет в консоль

'datetime.timedelta' object has no attribute 'strftime'

Ответы

▲ 1Принят

Объект timedelta, который представляет собой, в частности, разность двух дат, не имеет метода strftime. Поэтому вывести его можно в виде стандартного строкового представления str(time) >> 7:08:59.760949 (с микросекундами) либо отформатировать самостоятельно. Три варианта ниже.

import datetime

time = int((datetime.datetime.now() - datetime.datetime(2023, 3, 9, 12, 15, 18)).total_seconds())
print(f'вы уже оставляли комментарий {time // 3600}:{time // 60 % 60:02d}:{time % 60:02d} назад')

time = datetime.datetime.now() - datetime.datetime(2023, 3, 9, 12, 15, 18)
print(f'вы уже оставляли комментарий {str(time).split(".")[0]} назад')

time = datetime.datetime.now() - datetime.datetime(2023, 3, 9, 12, 15, 18)
print(f'вы уже оставляли комментарий {datetime.timedelta(seconds=int(time.total_seconds()))} назад')
вы уже оставляли комментарий 7:05:56 назад
вы уже оставляли комментарий 7:05:56 назад
вы уже оставляли комментарий 7:05:56 назад