即使时区遍布亚洲/ Calcutta,Django模型的DateTimeField也采用UTC

Rak*_*kmo 4 python mysql django timezone datetime

我正在使用Django 1.11。我settings.py已配置以下内容:

TIME_ZONE = 'Asia/Calcutta'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

这是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)
Run Code Online (Sandbox Code Playgroud)

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

请注意这个问题与我所要求的不同。我想更改整个时区,以便它在模型中也有效。

Kev*_*nry 5

datetimes如果为,将始终存储在UTCUSE_TZTrue

解决此问题的唯一方法是将设置USE_TZFalseauto_now 使用 django.utils.timezone.now(),它的定义是要执行以下操作:

如果USE_TZFalse,则这将是一个简单的日期时间(即没有关联时区的日期时间),代表系统本地时区中的当前时间。

听起来像您要的东西。

但是您确定那是您想要的吗?由于Asia/Calcutta 过去DST,因此有时您根本无法在数据库中明确表示。这就是为什么UTC是存储日期时间的标准选择的原因。