Django:当时区支持处于活动状态时如何转换天真的日期时间?

Django: How-to convert naive datetime when time zone support is active?

我正在为 Django 和 datetime 苦苦挣扎。

我有一个日期时间字符串 "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

然后 Django 在保存时抱怨并发出以下警告:

RuntimeWarning: DateTimeField ModelName.field_name received a naive
datetime (2012-01-01 00:00:00) while time zone support is active.

如何正确转换输入字符串,以便将其保存到可识别时区的日期时间模型字段中?

此致

Kev

Python 本身无法处理时区。你需要外部库来做到这一点。例如 dateutil:

from dateutil.parser import parse
dt = parse("Sun, 28 Aug 2016 11:42:00 +0200")

仅此一项就应该有效:

from datetime import datetime
date_published = datetime.strptime(date_published, "%a, %d %b %Y %H:%M:%S %z")

我得到的return是datetime.datetime(2016, 8, 28, 11, 42, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))