Не удается вычесть datetime и timestamp в django?
У меня есть поле timestamp = models.DateTimeField (auto_now_add=True) в БД. Я хочу найти разницу между этой меткой времени и datetime.теперь.)(
когда я попробовал datetime.now () - отметка времени, я получаю ошибку:
can't subtract offset-naive and offset-aware datetimes
Как это исправить?
2 ответов
эта ошибка относится к тому, как время хранится python. Согласно python документация:
существует два вида объектов даты и времени: "наивный" и "осведомленный". Это различие относится к тому, имеет ли объект какое-либо представление о часовом поясе, летнем времени или другом виде алгоритмической или политической корректировки времени.
в Django документация также указано, что:
когда часовой пояс поддержка отключена, Django использует наивные объекты datetime в местное время. Это просто и достаточно для многих случаев использования. В в этом режиме, чтобы получить текущее время, вы напишете:
import datetime
now = datetime.datetime.now()
когда поддержка часового пояса включена, Django использует объекты datetime с часовым поясом. Если ваш код создает объекты datetime, они также должны быть в курсе. В этом режиме пример сверху становится:
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
вы должны определить, является ли или не вы хотите знать часовой пояс на своем сайте, а затем соответствующим образом настроить сохраненное время. Чтобы преобразовать осведомленный dt в наивный, вы можете использовать модуль pytz и этого:
naive_dt = aware_dt.replace(tzinfo=None)
это работает, потому что все даты python имеют необязательный атрибут часового пояса,tzinfo
, который может использоваться для хранения информации о смещении dt от времени UTC.
Holá
Короткий ответ:
tz_info = your_timezone_aware_variable.tzinfo
diff = datetime.datetime.now(tz_info) - your_timezone_aware_variable:
вы должны добавить информацию о часовом поясе в свое время now ().
Но вы должны добавить то же самое часовой пояс переменной, поэтому я сначала прочитал атрибут tzinfo.