Python Django的问题是不必要地增加了5个小时的最新时间。

Python Django的问题是不必要地增加了5个小时的最新时间。,python,django,datetime,Python,Django,Datetime,我正在使用一个应用程序,它有一个post(类似于便笺的)对象。这是邮政模型 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 = model

我正在使用一个应用程序,它有一个post(类似于便笺的)对象。这是邮政模型

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点,那么我将在调试控制台中相应地获得Fri Feb 20 2015 15:00:00 GMT-0500。但在数据库中,它保存为20:00:00。当我在屏幕上显示post时,数据库时间显示为20:00:00

在settings.py中,我已更改:

TIME_ZONE = None

USE_I18N = True

USE_L10N = True

USE_TZ = False

但是问题仍然存在,我不知道如何解决它。

这是因为存储在数据库中的datetime能够识别日期和时间数据,它还存储时区。当打印aware datetime对象时,您得到的正是时间点,但在UTC时区(因此为5小时增量)


Django将日期存储在数据库中作为UTC,因此时间
20:00
是正确的。如果您希望将所有日期显示为
GMT-0500
时区,则应设置
时区设置并
使用TZ=True
。。。否则,目前Django不知道您想要的时区,您可以自己将任何日期正常化,例如查看代码。

我将时间更改为“America/New_York”,我将USE_TZ设置为true,但我仍然存在相同的问题。在数据库中,它存储为2015-04-04T20:04:00Z,显示为2015-04-04T20:04:00Z。我只能建议您查看一下文档……同时再次检查您的datetime是否意识到tz,如果它在最后显示为
Z
,看起来是这样的,但如果不显示,则可能是一条线索!转换行“localtime(now())”就是将一个对象转换为另一个对象的方法
>>> 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>)
>>> 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>)