0

我正在与 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

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

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

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

最好的问候

凯夫

4

2 回答 2

2

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

from dateutil.parser import parse
dt = parse("Sun, 28 Aug 2016 11:42:00 +0200")
于 2016-08-29T11:26:07.843 回答
1

仅此一项就应该起作用:

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)))

于 2016-08-29T15:08:01.777 回答