Django如何在内部存储日期时间字段?在存储之前它是否将本地时间转换为UTC?我给它一个从stdlib生成的天真日期时间。
a = Message( fromm = fromm, to = to,
sent_time = datetime.datetime.now(), content = content)
答案 0 :(得分:1)
Django ORM将日期时间存储在SQL数据库的相应字段中。基础SQL列由使用的数据库确定。例如。对于MySQL,映射定义在这里:
https://github.com/django/django/blob/master/django/db/backends/mysql/creation.py#L16
从Django转换为SQL:
https://github.com/django/django/blob/master/django/db/backends/mysql/base.py#L272
从SQL转换为Django:
https://github.com/django/django/blob/master/django/db/models/fields/init.py#L1186
Python datetime.datetime.now()
是所谓的timezone-naive日期时间,没有任何时区信息。因此,在使用它存储时间时可能会丢失信息,并且不鼓励使用它。 It returns the local time。似乎如果省略时区信息,Django USE_TZ设置将确定default timezone information是否在内部进行了改造。
相反,您应该使用django.utils.timezone.now()
(带时区的本地时间)或django.utils.timezone.utcnow()
(带有UTC时区的时间)。
更多信息
https://docs.djangoproject.com/en/dev/topics/i18n/timezones/#naive-and-aware-datetime-objects