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