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)))
我正在为 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)))