我正在使用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与我的要求不相似。我想改变整个时区,这样它在模型中也是有效的。
答案 0 :(得分:3)
datetimes
为USE_TZ
, True
将always be stored in UTC。
唯一的方法是将USE_TZ
设置为False
。 auto_now
uses django.utils.timezone.now()
,is defined to do以下内容:
如果
USE_TZ
为False
,则这将是一个天真的日期时间(即没有关联时区的日期时间),表示系统本地时区的当前时间。
这听起来就像你要求的那样。
但你确定这就是你想要的吗?由于Asia/Calcutta
had DST in the past,您有时无法在数据库中明确表示。这就是为什么UTC 是存储的唯一理智选择。