Django在DB保存上转换Datetime

时间:2014-01-30 00:36:48

标签: django postgresql datetime timezone

我完全难过试图保存用户输入的日期时间。它可以节省,但会进行某种时区转换。我尝试过设置USE_TZ = True和TIME_ZONE ='UTC',但由于一些奇怪的原因,Django会保存我的日期时间,但它会从小时减去7。例如,如果我输入日期时间为'2014-01-29 16:56:00',当我查看数据库时,我会看到'2014-01-29 09:56:00-07'。我已经阅读了时区文档,但我完全不知道为什么会发生这种情况。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

看起来这并不是Django的具体问题,而是Postgres的一个问题。由于Django告诉Postgres创建一个“带时区的时间戳”,Postgres会正确存储时间戳,并设置一个偏移量,当你直接从Postgres查询数据时,它会显示应用了偏移量的时间戳。但是当数据返回Django时,除非您提供了偏移量,否则将删除偏移量。似乎令人困惑,不知道为什么这样做。对于我的特定用例,我选择编写自定义字段来创建“没有时区的时间戳”。 Django只创建“带时区的时间戳”,所以解决这个问题的唯一方法就是:

  1. 使用SQL更改表。如果使用South,则部署到多个环境时可能不是最佳选择。

  2. 创建一个自定义字段,用于创建“无时区的时间戳”。这是我决定去的路线。希望这是正确的路线。

  3. 感谢所有试图帮助我解决这个问题的人。

答案 1 :(得分:0)

Django文档声明默认时区设置为:

TIME_ZONE = 'America/Chicago'

这是链接:

https://docs.djangoproject.com/en/dev/ref/settings/#time-zone

在设置TIME_ZONE时,他们还说明了几个选项。一个选项是按名称手动设置它,这里是Django Doc的TIME_ZONE名称列表的链接:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones