使用python / django进行日期时间本地化

阿皮尔奇奇

我正在尝试解析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
f

entry.published_parsed无论输入时间字符串是什么,feedparser始终是utc时间元组。要获取时区感知datetime对象:

from datetime import datetime

utc_time = datetime(*entry.published_parsed[:6], tzinfo=utc)

哪里utc是tzinfo对象(如datetime.timezone.utcpytz.utc,还是您的自定义tzinfo(适用于较早的python版本)

您不应该将utc时间传递给mktime()期望本地时间的时间。相同的错误:具有正确的datetime和正确的timezone

确保USE_TZ=Truedjango到处都使用可感知的datetime对象。给定一个可识别时区的datetime对象,无论您是TIME_ZONE还是timezone.get_current_timezone(),django都应将其正确保存到db

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django视图代码中本地化日期时间(使用BST)?

如何使用特定格式在Django模板上获取本地化日期?

使用resx文件进行本地化会生成MissingManifestResourceException

Laravel:如何使用Carbon在视图中本地化日期

本地化日期时间列

使用一种资源进行UWP本地化

使用本地化日期格式查询的Rails

如何使用dateutil.tz.tz.tzoffset本地化使用strptime创建的时区朴素日期时间?

Symfony 4:使用本地化日期

使用laravel对页面标题进行本地化

如何使用SwiftDate框架打印当前时区中的日期和时间(本地化)

每种语言使用多个resx文件进行本地化

Pytz本地化日期时间

如何使用BufferedReader进行本地化?

使用资源文件进行.NET本地化的策略

使用TornDB Python进行日期时间格式化

使用自定义的本地化资源进行构建

使用静态方法进行WPF本地化

使用节点本地化

jQuery本地化UTC日期时间

使用Babel进行Flask WTF本地化

使用本地目录根目录对git repo进行本地化?

在Python中,如何仅使用datetime包获取本地化的时间戳?

在cakephp 3中使用带有日期选择器的本地化日期格式

如何使用本地化时间进行绘图?日期时间系列本地化到我的时区,但绘图仍然使用原始时间(熊猫)

在python中本地化日期时间

创建本地化的 django 应用程序并使用其他应用程序的本地化

使用@page 指令进行本地化

Python 中的日期名称本地化