2014-01-30 31 views
1

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

+0

是在settings.py中正确设置的时区? – sirFunkenstine

+0

我相信如此,我的设置设置为TIME_ZONE ='UTC'。我猜更大的问题是,在保存到模型时,Django是否总是尝试进行某种时区转换? – tmuzzin

回答

1

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

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

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

谢谢大家试图帮助我弄清楚这一点。

0

Django文档状态默认时区设置为:

TIME_ZONE = 'America/Chicago' 

这里的链接:

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

他们设置TIME_ZONE时,也注明了几个选项。一种选择是按名称手动设置,这里是关Django的文档的链接为TIME_ZONE名称列表:

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

+0

我已将我的时区设置设置为'UTC',但仍保存时从UTC时间减去7。我目前在丹佛时区,这是从UTC -7,但没有设置丹佛在我的设置任何地方。芝加哥从UTC开始是-6,所以它绝对不是在某处攫取默认值。 – tmuzzin

+0

检查上面的django文档链接。您可能需要设置另一个与time_zone相关的设置,因此它不会默认从您所在的时区开始。 –

+0

我很欣赏你试图帮助我,但我已经阅读了这些文档的狗屎,没有什么会引导我为什么我的时区设置为UTC时获得-7时区。 – tmuzzin