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__
请告知如何将时区更改为“亚洲/加尔各答”。
答案 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)