我正在使用启用了 mysql 和时区的 django 1.4.1。我将数据转储到 yaml,修改了一些字段以创建一些测试数据,然后尝试将其加载回去。但是,即使指定了 tz,Django 仍然提示天真的日期时间
具体来说,我的加载数据有:
fields: {created_date: !!timestamp '2012-09-15 22:17:44+00:00', ...
但是 loaddata 给出了错误:
RuntimeWarning: DateTimeField received a naive datetime (2012-09-15 22:17:44) while time zone support is active.
这对我来说没有多大意义,因为它:
- UTC 时间戳
- Django 使用 dumpdata 导出的完全相同的格式
有什么方法可以告诉 django 这是一个 UTC 日期吗?
最佳答案
问题源于 PyYAML。当 loaddata 将日期时间交给 PyYAML 时,它会获取感知日期时间,将时间调整为 UTC,然后返回一个原始日期时间,这会生成警告。
有一个Django ticket , 以及 PyYAML ticket关于这个问题。两者都更详细地介绍了上述意外行为。从工单中的评论来看,这个问题似乎不太可能很快得到解决。
如果您在项目的 settings.py 中设置了 TIME_ZONE = 'UTC'
,您将在正确的时间加载,但您仍然会收到警告。如果您的时区设置为其他任何时区,Django 会将日期时间视为本地日期时间,并将其调整为 UTC,这可能是不需要的。
避免这种情况的最佳方法是使用 JSON 作为序列化格式。
希望对您有所帮助。
关于python - 加载数据未正确处理时间戳和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462634/