为什么django DateTimeField
将tzinfo
中的datetime
还原为<utc>
?
以下是我的测试代码。
是正常还是错误。?
如果是正常的,原因是什么?
models.py
class Date(models.Model):
datetime = models.DateTimeField()
settings.py
TIME_ZONE = 'Asia/Seoul'
USE_TZ = True
test.py
from django.utils import timezone
datetime = timezone.localtime(timezone.localtimezone.now())
#now datetime is datetime.datetime(2015, 10, 22, 20, 31, 56, 248000, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)
models.Date(datetime=datetime).save()
#If I check datebase, It shows 2015-10-22 11:31:56.248000
model.Date.object.get(..)
#It returns datetime.datetime(2015, 10, 22, 11, 31, 56, 248000, tzinfo=<UTC>)
我希望django存储2015-10-22 20:31:56.248000
并返回datetime.datetime(2015, 10, 22, 20, 31, 56, 248000, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)
-------------- ----------------编辑
我使用了Sqlite
。
答案 0 :(得分:3)
请务必阅读Django's timezone documentation。第一句话简明扼要地阐述了这种方法:
当启用对时区的支持时, Django将日期时间信息以UTC格式存储在数据库中,在内部使用时区感知日期时间对象,并将它们转换为模板中最终用户的时区和形式。
所以,是的,从UTC中看到数据库的返回值是正常的。
至于原因,文件说明:
即使您的网站仅在一个时区可用,在数据库中以UTC格式存储数据仍然是一种很好的做法。主要原因是夏令时(DST)。许多国家都有DST系统,其中时钟在春季向前移动,在秋季向后移动。如果你在当地工作,那么当转换发生时,你可能每年会遇到两次错误。
它还会链接到pytz
文档中的a more detailed description。