Django DateTimeField存储日期时间,与tzinfo无关
为什么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
。
-
确保阅读Django的时区文档。在第一句话中简要说明了该方法:
启用时区支持后, Django将日期时间信息存储在数据库中的UTC中,在
内部使用可识别时区的日期时间对象,并将其以模板和形式转换为最终用户的时区。因此,是的,在UTC中看到数据库的返回值是正常的。
至于原因,文档指出:
即使您的网站仅在一个时区中可用,将数据存储在数据库中的UTC中仍然是一种好习惯。主要原因是夏令时(DST)。许多国家/地区采用夏令时制,时钟在春季向前移动,在秋季向后移动。如果您在当地时间工作,那么转换时每年可能会遇到两次错误。
网站还链接了更详细的描述中
pytz
的文档。