Я нахожусь в ситуации, когда я использую django (2.0.7) для работы с несколькими базами данных:
- database_A: без часового пояса;
- database_B: с часовым поясом 'Европа/ Paris ';
settings.py
USE_TZ = True
TIME_ZONE = 'Europe/Paris'
DATABASES = {
'database_A': {
'NAME': ...
'PASSWORD': ... etc.
'TIME_ZONE': None,
# still raise RuntimeWarning; received a naive datetime while time zone support is active.
},
'database_B': {
'NAME': ..., etc.
}
на моделях базы данных A
class Something(models.Model):
date_creation = models.DateTimeField()
def save(self, *args, **kwargs):
if self._state.adding is True:
self.date_creation = timezone.datetime.now() # naive
print("BEFORE SAVE")
print(self.date_creation)
super(Something, self).save(*args, **kwargs)
print("AFTER SAVE")
print(self.date_creation)
print("AFTER REFRESH")
self.refresh_from_db()
print(self.date_creation)
Я получаю следующий результат
BEFORE SAVE
2019-11-04 11:44:35.233876
AFTER SAVE
2019-11-04 11:44:35.233929
AFTER REFRESH
2019-11-04 10:44:35.23392 # 10:44:35 , what's wrong ô_O ?
У меня такая же разница в 1 час между Европой / Парижем и UTC.
import pytz
from datetime import datetime
datetime.now(tz=pytz.timezone('Europe/Paris')), timezone.now()
(datetime.datetime(2019, 11, 4, 12, 10, 55, 320028, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>),
datetime.datetime(2019, 11, 4, 11, 10, 55, 320077, tzinfo=<UTC>))
Итак, я думаю, что PostgreSQL использует UTC для сохранения моего наивного даты и времени, рассматриваемого как дата / время с учетом часового пояса?
В базе данных у меня есть следующее время
\d something_table
date_creation | timestamp without time zone | non NULL Par defaut, now()
SELECT NOW();
now
-------------------------------
2019-11-04 11:45:48.907105+01 # consider delay, changing terminal to launch query;
(1 ligne)
Документация Django о нескольких базах данных и часовых поясах говорит:
Установите параметр TIME_ZONE в соответствующий часовой поясдля этой базы данных в параметре DATABASES.
Это полезно для подключения к базе данных, которая не поддерживает часовые пояса и не управляется Django, когда USE_TZ имеет значение True.
Django или PostgreSQL сохраняют локальное время в UTC, даже еслиime_zone это None? Есть идеи как это решить? (Я не могу изменить схему базы данных T_T)