我正在使用一个有帖子(粘滞便笺)对象的应用程序。这是帖子模型。
class Post(models.Model):
author = models.ForeignKey(Account)
content = models.CharField(max_length=40)
start_time = models.DateTimeField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __unicode__(self):
return '{0}'.format(self.content)
当我创建具有特定开始时间的帖子时,假设下午3点,那么我因此在调试控制台中获得2015年2月20日星期五15:00:00 GMT-0500。但是在数据库中,它保存为20:00:00。当我将帖子显示在屏幕上时,会显示数据库时间为20:00:00。
在settings.py中,我更改了:
TIME_ZONE = None
USE_I18N = True
USE_L10N = True
USE_TZ = False
但问题仍然存在,我不知道如何解决它。
答案 0 :(得分:2)
Django将数据库中的日期存储为UTC,因此时间20:00
是正确的。如果您希望所有日期显示为GMT-0500
时区,则应设置TIME_ZONE
设置和USE_TZ = True
...否则,目前Django不知道您想要的时区,并且由您自己规范化任何日期,例如在视图代码中。
答案 1 :(得分:0)
这是因为存储在数据库中的日期时间是识别,在日期和时间数据中,它还存储时区。打印感知日期时间对象时,您得到的就是时间点,但是在UTC时区(因此是5小时增量)。
>>> from datetime import datetime
>>> from django.utils.timezone import now
>>> datetime.now()
datetime.datetime(2015, 2, 2, 15, 29, 10, 202480)
>>> now()
datetime.datetime(2015, 2, 2, 21, 29, 11, 459850, tzinfo=<UTC>)
如您所见,datetime.now()
返回当地时间(-6小时)内的datetime对象。 识别对象以UTC时区表示,距当地时区+6小时。
如果您想使用django.utils.timezone.localtime
:
>>> from django.utils.timezone import now, localtime
>>> localtime(now())
datetime.datetime(2015, 2, 2, 15, 31, 25, 666377, tzinfo=<DstTzInfo 'America/Chicago' CST-1 day, 18:00:00 STD>)