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

时间:2016-08-28 18:15:48

标签: django datetime data-aware

我正在使用Django和日期时间。

我有一个datetime-string,因为这个“太阳,2016年8月28日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.

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

最佳复制

千电子伏

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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)))