Django: Как конвертировать наивные даты и времени, когда активна поддержка часовых поясов?
Я борюсь с Джанго и датой.
У меня есть строка даты и времени, такая как "Sun, 28 Aug 2016 11:42:00 +0200", поэтому, с моей точки зрения, включая информацию о часовом поясе "+0200"
Затем я конвертирую это, используя это:
date_published = time.strptime(date_published, "%a, %d %b %Y %H:%M:%S %z")
Это дает мне это:
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=28, tm_hour=11, tm_min=42, tm_sec=0, tm_wday=6, tm_yday=241, tm_isdst=-1)
Затем я пытаюсь преобразовать это так:
date_published = datetime.fromtimestamp(time.mktime(date_published))
Что дает мне:
2016-08-28 11:42:00
И тогда Джанго жалуется при сохранении его со следующим предупреждением:
RuntimeWarning: DateTimeField ModelName.field_name received a naive
datetime (2012-01-01 00:00:00) while time zone support is active.
Как правильно преобразовать входную строку, чтобы я мог сохранить ее в полях datetime-модели с учетом часового пояса?
Лучшие награды
Кев
2 ответа
Решение
Это одно должно работать:
from datetime import datetime
date_published = datetime.strptime(date_published, "%a, %d %b %Y %H:%M:%S %z")
Возвращение я получаю datetime.datetime(2016, 8, 28, 11, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
Сам Python не может обрабатывать часовые пояса. Вам нужна внешняя библиотека, чтобы сделать это. Например, dateutil:
from dateutil.parser import parse
dt = parse("Sun, 28 Aug 2016 11:42:00 +0200")