4

我有一个 django 1.3 项目,我正在添加将按特定时间表运行的文本通知。因此,我需要该应用程序能够感知时区。看起来 django 1.4 处理得很好。问题是我使用 SQLite for db,它不存储时区信息,所以我必须转换。我是 django 新手。关于如何将 SQLlite 中的日期时间字段转换为时区感知字段的任何建议。

顺便说一句,当我在升级到 django 1.4 并激活时区支持后启动 manage.py shell 时,我收到以下消息:

RuntimeWarning: SQLite received a naive datetime (2012-04-05 15:18:49.939725) while 
time zone support is active. RuntimeWarning)

谢谢!

4

1 回答 1

4

您不会将 SQlite 中的日期时间字段转换为时区感知字段。在 SQlite 中,日期时间仍然是幼稚的,但会转换为 UTC。并且可以在应用程序级别使用时区感知日期时间。

例如,当您从 SQlite 查询具有日期时间字段的模型实例时,Django:

  1. 从 SQLite 获取原始日期时间,将其设置为具有 UTC 时区的感知日期时间
  2. 因此,当您访问 model_instance.datetime_field 时,它已经知道时区并本地化为 UTC
  3. 然后在模板中,例如,您可以将其本地化到当前时区

编辑:更正了我最初的错误答案,关于你在模型实例上得到了什么。

如果当前 SQlite 数据库中的日期时间不是 UTC,则需要进行一次性迁移以将它们全部转换为 UTC。(而 UTC 我只是指天真的 UTC 值。作为 SQlite - 以及 MySQL - 没有存储时区信息的日期时间字段)

我建议您非常仔细和彻底地阅读时区相关文档:https ://docs.djangoproject.com/en/1.4/topics/i18n/timezones/

这很容易出错。

是的,您将获得RunTimeWarning代码“提供”天真的日期时间给 Django 进行保存的每个实例。您必须逐步修复这些问题,让它们具有时区意识。

于 2012-04-05T21:51:28.147 回答