python-即使时区到处都是亚洲/ Calcutta,Django模型的DateTimeField也采用UTC

我正在使用Django 1.11.
我的settings.py已进行以下配置:

TIME_ZONE = 'Asia/Calcutta'
USE_I18N = True
USE_L10N = True
USE_TZ = True

这是IST(印度标准时间).我的系统设置为IST. MySQL current_time返回IST(Django运行时的服务器),并在IST中显示时间戳. Python的datetime.now()也提供了IST.

现在的问题是,我的models.py具有以下字段:

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

数据库是MySQL.当我在其中插入任何记录时,时间戳以UTC为单位.我正在考虑添加一些中间件,如this答案所建议的那样,但这并不是推荐的方法.即使已配置了所有IST,为什么还要采用UTC?我是否缺少一些需要为模型单独设置的配置?

请注意,this question与我所要求的不相似.我想更改整个时区,以便它在模型中也有效.

最佳答案
如果USE_TZ为True,则datetimes将为always be stored in UTC.

唯一的解决方法是将USE_TZ设置为False. auto_now uses django.utils.timezone.now(),其中is defined to do为以下内容:

If USE_TZ is False, this will be a naive datetime (i.e. a datetime without an associated timezone) that represents the current time in the system’s local timezone.

听起来像您要的东西.

但是您确定那是您想要的吗?由于Asia / Calcutta had DST in the past,有时您根本无法在数据库中明确表示.因此,UTC是唯一明智的存储选择.

转载注明原文:python-即使时区到处都是亚洲/ Calcutta,Django模型的DateTimeField也采用UTC - 代码日志