【发布时间】:2015-12-14 17:44:08
【问题描述】:
我正在尝试解析 RSS 提要。提要中的条目具有日期元素,例如:
<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
【问题讨论】:
-
您是否对时区转换感兴趣,或者您愿意通过 datetime.timedelta 操作简单地添加一个小时?
-
最后,我希望有正确的 UTC 时间。现在离开一个小时(在节假日期间为两个小时)可能是一种方法。不过我还没看过。我想知道是否还有其他方法。我尝试了例如 timezone.activate() 和 timezone.deactivate() ,它们似乎以正确的方式更改了 current_timezone,但这并没有解决问题。
-
您可以让日期时间感知,或者如果它已经感知但错误,则更改时区。
标签: python django datetime feedparser