Django:“;自动“现在添加”为“真”;给出错误的时间

Django:“;自动“现在添加”为“真”;给出错误的时间,django,timezone,Django,Timezone,我希望在Django数据库中创建记录时自动记录当前时间 在我的模型中,我使用: dateTime = models.DateTimeField(auto_now_add=True) 根据我的理解,考虑到正确的时区,这会自动标记时间。 然而,这输出的时间比我的本地时间提前了5个小时 因此,为了尝试并调试此功能,我在视图中运行了此函数并打印了输出: from django.utils import timezone timeNow = timezone.localtime(timezone.no

我希望在Django数据库中创建记录时自动记录当前时间

在我的模型中,我使用:

dateTime = models.DateTimeField(auto_now_add=True)
根据我的理解,考虑到正确的时区,这会自动标记时间。 然而,这输出的时间比我的本地时间提前了5个小时

因此,为了尝试并调试此功能,我在视图中运行了此函数并打印了输出:

from django.utils import timezone
timeNow =  timezone.localtime(timezone.now())
timeNow将输出正确的时间

因此,我将我的模型改为:

def get_time():
    return timezone.localtime(timezone.now())

dateTime = models.DateTimeField(default = get_time)
这仍然会导致相同的错误时间戳

我还更改了我的settings.py中的时区

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Canada/Central'

USE_I18N = True

USE_L10N = True

USE_TZ = True
你知道我遗漏了什么吗

根据我的理解,考虑到正确的时区,这会自动标记时间

那是个误会。见本报告第一句:

启用时区支持后,Django在数据库中以UTC格式存储日期时间信息,在内部使用时区感知的日期时间对象,并以模板和表单将其转换为最终用户的时区

如您所见,UTC日期时间可以转换为您想要显示的任何内容,等等。

在settings.py文件中

将USE_TZ值保持为False

使用_TZ=False


这对我很有效。

**在模型导入日期时间中

在settings.py中,将USE_TZ更改为False**

语言代码='en us'

时区='UTC'

使用_I18N=True

使用\u L10N=True


USE_TZ=False

Datetime在存储时从连接的时区转换为UTC,然后在检索时返回连接的时区。不要这样做。请参见此处的第一项:。总结:Q:我不需要多个时区。我应该启用时区支持吗?A:是的。启用时区支持后,Django将使用更精确的本地时间模型。这将保护您免受夏令时(DST)转换期间出现的微妙且不可复制的错误的影响。