Django无法从UTC格式更改时区

时间:2017-10-21 11:52:38

标签: python django datetime

  

settings.py

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Calcutta'

USE_I18N = True

USE_L10N = True

USE_TZ = True
  

models.py

class Mymodel(models.Model):
    auto_increment_id = models.AutoField(primary_key=True)
    datetime = models.DateTimeField(auto_now_add=True, blank=True)
    ip_add = models.CharField(max_length=30)
    data = models.TextField()

我正在向我的URL发送一个post请求,它通过我的视图将数据存储到db(使用sqlite)。 datetime字段始终以UTC格式存储时间(这是settings.py中TIME_ZONE变量的默认设置)

我已将TIME_ZONE改为'Asia / Calcutta;在引用此链接后:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

但仍然以UTC格式存储日期时间。我在谷歌搜索此问题后尝试将USE_TZ更改为False,但这对我没有用。

我只是在python shell中查询db中的数据。即。

x = Mymodel()

for i in range(len(x)):
    print x[i].__dict__

请告知如何将时区更改为“亚洲/加尔各答”。

3 个答案:

答案 0 :(得分:3)

我尝试了以下设置,它对我来说很好。

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Calcutta'

USE_I18N = True

USE_L10N = False

USE_TZ = False

需要将USE_L10N设置为False,格式本地化由此设置控制(应用于数字和日期)。

见以下链接:

https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/

答案 1 :(得分:1)

我用我自己的模型(Django v1.11.6)运行了一些测试,它似乎对我有效。

尝试做一些测试(python manage.py shell),如:

from MyApp.models import Mymodel
testmodel = Mymodel(ip_add="something", data="something")
testmodel.save()
testmodel.datatime

当启用USE_TZ时,它有一个tzinfo:

datetime.datetime(2017, 10, 21, 13, 43, 8, 718392, tzinfo=<UTC>)

当禁用USE_TZ时,它没有tzinfo:

datetime.datetime(2017, 10, 21, 15, 45, 25, 471765)

我在大约两个时间做了这两个测试。我当地时间15:45。

这存储在我的数据库中:

2017-10-21 13:43:08.718392 (with timezone enabled)
2017-10-21 15:45:25.471765 (without timezone enabled)

日期时间表列类型是datetime(6)

另一件事。你说你正在做POST。关于使用'auto_now_add'的文档:“请注意,总是使用当前日期;它不仅仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了值,也会被忽略” 。 (https://docs.djangoproject.com/en/1.11/ref/models/fields/

答案 2 :(得分:0)

尝试将系统时区设置为“亚洲/加尔各答”

访问https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/

希望这有帮助