python получает дату предыдущего дня в UTC, используя datetime(datetime.date) и timedelta

#python-3.x #datetime #timedelta

#python-3.x #datetime #timedelta

Вопрос:

я хотел получить дату предыдущего дня в UTC.

 from datetime import datetime, timedelta
month_now = str(datetime.date(datetime.utcnow()))[:-3]
 
 >>> print(month_now)
2021-01
 

И теперь

 previous_day = str(datetime.date(datetime.utcnow()-datetime.timedelta(days=1)))
 

Ошибка атрибута: объект типа ‘datetime.datetime’ не имеет атрибута ‘timedelta’

Пожалуйста, помогите.Во всех связанных сообщениях предлагалось что-то вроде, но нужно что-то с datetime.date

 Previous_Date = datetime.datetime.today() - datetime.timedelta(days=1)
 

Ответ №1:

Прекратите использовать utcnow и utcfromtimestamp — вместо этого будьте конкретны , используя timezone.utc .

 from datetime import datetime, timedelta, timezone

todayUTC = datetime.now(timezone.utc).date()
yesterdayUTC = today - timedelta(1)

print(todayUTC, yesterdayUTC)
# 2021-01-08 2021-01-07
 

Также не datetime то, что классы timedelta и т.д. являются классами из модуля datetime. Если вы импортируете их явно ( from datetime import ... ), вы должны использовать их соответствующим образом, отсюда и ошибка. Другой вариант — импортировать модуль, чтобы затем вы могли вызывать все его классы, например datetime.timedelta , , datetime.datetime и так далее. Документы. Тогда ваш исходный код должен был бы выглядеть примерно так

 import datetime

month_now = str(datetime.datetime.utcnow().date())[:-3]
previous_day = str((datetime.datetime.utcnow()-datetime.timedelta(days=1)).date())
print(month_now, previous_day)
# 2021-01 2021-01-07
 

Комментарии:

1. Большое спасибо!! Но по-прежнему не удается получить другой вариант, упомянутый выше, думал, что получил желаемый результат, я искал другой вариант, упомянутый в комментарии

2. @div: я добавил пример, возможно, это поможет прояснить ситуацию.