我正在使用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。我正在考虑添加一些中间件,正如这个答案所建议的那样,但这感觉不是推荐的方式。为什么即使在所有位置都配置了 IST 时也要采用 UTC?我是否缺少一些需要为模型单独设置的配置?
请注意,这个问题与我的要求不同。我想更改整体时区,以便它在模型中也有效。
如果USE_TZ
True
,datetimes
将始终以UTC格式存储。
唯一的解决方法是将USE_TZ
设置为 False
. auto_now
使用 django.utils.timezone.now()
,它被定义为执行以下操作:
如果
USE_TZ
False
,这将是一个朴素日期时间(即没有关联时区的日期时间(,表示系统本地时区中的当前时间。
这听起来像是你要的。
但你确定这就是你想要的吗?由于Asia/Calcutta
过去有 DST,因此有时您根本无法在数据库中明确表示。这就是为什么 UTC 是存储日期时间的标准选择。