2014-07-08 2 views
1

장고는 내부적으로 날짜/시간 필드를 어떻게 저장합니까? 저장하기 전에 현지 시간을 UTC로 변환합니까? stdlib에서 생성 된 순진한 datetime을 제공하고 있습니다.Django, Python datetime.now() 및 시간대 저장

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

답변

1

Django ORM은 SQL 데이터베이스의 해당 필드에 날짜 시간을 저장합니다. 기본 SQL C 럼은 사용 된 데이터베이스에 의해 결정됩니다. 예 : MySQL을 들어, 매핑은 여기에 정의됩니다

https://github.com/django/django/blob/master/django/db/backends/mysql/creation.py#L16

변환 장고에서 SQL에 :

https://github.com/django/django/blob/master/django/db/backends/mysql/base.py#L272

변환 SQL에서 장고 :

https://github.com/django/django/blob/master/django/db/models/fields/init.py#L1186

파이썬 datetime.datetime.now() 소위 시간대 순진 (timezone-naive datetime)이며 시간대 정보가 있습니다. 따라서 시간을 저장할 때 정보가 손실 될 수 있으며 사용법이 권장되지 않습니다. 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

+0

예,'timezone.now를 사용하여()'내 걱정을 해결 추가 정보. 설정에서'TIME_ZONE'을 설정하면 DB의 UTC 시간이 현지 시간으로 변환됩니다 – aitchnyu