我正在尝试解析RSS feed。提要中的条目具有日期元素,例如:
<dc:date>2016-09-21T16:00:00+02:00</dc:date>
我使用feedparser尝试执行以下操作:
published_time = datetime.fromtimestamp(mktime(entry.published_parsed))
但是问题是我似乎在数据库中存储的时间不正确。在这种情况下,日期时间存储为:
2016-09-21 13:00:00
...当我期望14:00-正确的UTC时间时。
我认为问题出在我们的django设置中:
TIME_ZONE = 'Europe/Berlin'
因为当我切换到:
TIME_ZONE = 'UTC'
...数据时间存储为正确的UTC时间:
2016-09-21 14:00:00
有什么方法可以保持django设置不变,但可以正确地解析和存储此日期时间,而django时区设置不会对其造成影响?
编辑:也许这样更清楚...
print entry.published_parsed
published_time = datetime.fromtimestamp(mktime(entry.published_parsed))
print published_time
localized_time = pytz.timezone(settings.TIME_ZONE).localize(published_time, is_dst=None)
print localized_time
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=21, tm_hour=14, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=265, tm_isdst=0)
2016-09-21 15:00:00
2016-09-21 15:00:00+02:00
entry.published_parsed
无论输入时间字符串是什么,feedparser始终是utc时间元组。要获取时区感知datetime
对象:
from datetime import datetime
utc_time = datetime(*entry.published_parsed[:6], tzinfo=utc)
哪里utc
是tzinfo对象(如datetime.timezone.utc
)pytz.utc
,还是您的自定义tzinfo(适用于较早的python版本)。
您不应该将utc时间传递给mktime()
期望本地时间的时间。相同的错误:具有正确的datetime和正确的timezone。
确保USE_TZ=True
django到处都使用可感知的datetime对象。给定一个可识别时区的datetime对象,无论您是TIME_ZONE
还是timezone.get_current_timezone()
,django都应将其正确保存到db中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句