Django DateTimeField存储与tzinfo无关的日期时间



为什么django DateTimeFielddatetime中的tzinfo还原为<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文档中更详细的描述。

相关内容

  • 没有找到相关文章

最新更新