即使时区到处是亚洲/加尔各答,Django Model的DateTimeField也会采用UTC

时间:2018-03-22 09:33:29

标签: python mysql django datetime

我正在使用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与我的要求不相似。我想改变整个时区,这样它在模型中也是有效的。

1 个答案:

答案 0 :(得分:3)

如果datetimesUSE_TZ

Truealways be stored in UTC

唯一的方法是将USE_TZ设置为Falseauto_now uses django.utils.timezone.now()is defined to do以下内容:

  

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

这听起来就像你要求的那样。

但你确定这就是你想要的吗?由于Asia/Calcutta had DST in the past,您有时无法在数据库中明确表示。这就是为什么UTC 是存储的唯一理智选择