Django,Python datetime.now()并存储时区

时间:2014-07-08 05:41:58

标签: django python-datetime

Django如何在内部存储日期时间字段?在存储之前它是否将本地时间转换为UTC?我给它一个从stdlib生成的天真日期时间。

a = Message( fromm = fromm, to = to,
sent_time = datetime.datetime.now(), content = content)

1 个答案:

答案 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