Django:“auto_now_add=True”给出的时间不正确

Mat*_*ttG 2 django timezone

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

在我的模型中,我使用:

dateTime = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,考虑到正确的时区,这会自动标记时间。然而,这是输出比我的当地时间早 5 小时的时间。

所以为了尝试调试这个,我在我的视图中运行了这个函数并打印了输出:

from django.utils import timezone
timeNow =  timezone.localtime(timezone.now())
Run Code Online (Sandbox Code Playgroud)

timeNow 将输出正确的时间。

所以我将模型更改为:

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

dateTime = models.DateTimeField(default = get_time)
Run Code Online (Sandbox Code Playgroud)

这仍然会导致相同的错误时间戳。

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

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Canada/Central'

USE_I18N = True

USE_L10N = True

USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

任何想法我缺少什么?

Kev*_*nry 6

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

那是一种误解。请参阅时区文档的第一句话:

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

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