记录创建和更新时间未存储在localtime django

时间:2017-09-12 10:58:06

标签: django timezone

我有一个模型“Member”,其中有两个字段“created_at”和“updated_at”。 最初,它们的定义如下:

created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now_add=True, null=True)

我的settings.py有 USE_TZ = True 和TIME_ZONE =“America / New_York”。

我定义了一个自定义中间件来激活用户选择的时区。

current_tz = pytz.timezone("<user defined timezone>")
timezone.activate(current_tz)

然后,我更新字段以存储用户本地时间:

created_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)
updated_at = models.DateTimeField(default= lambda: timezone.localtime(timezone.now()), null=True)

现在,当我更新会员记录并检查 updated_at 时间时,它显示相同的UTC时区而不是用户的本地时间。

django总是将日期时间值存储在UTC中的数据库中,或者我在这里遗漏了什么

1 个答案:

答案 0 :(得分:1)

您的所有要求都应关注USE_TZ = True

如果设置USE_TZ = True,则DateTimeField会存储UTC时间。 如果您在settings.py中对USE_TZ = True发表评论,则可以获得所需内容。

但是在项目中,你最好总是打开USE_TZ,如果打开USE_TZ,所有商店或内部处理甚至打印,都是UTC时区。当您在模板中显示时,time format conversion非常方便。