Привет,
В питоне datetime.now() возвращает текущее локальное время, например, 1:00.
Использую PostgreSQL. У него настроено локальное время, select now() возвращает 1:00 +03 - все Ок.
В django есть класс с полем
date = models.DateTimeField(default=datetime.now)
Сохраняю в базу класс.save().
Получаю в базе 8:00 +03 - на 7 часов больше!
Беру из базы через модель.objects.filter получаю на выходе локальное время 1:00 - т.е. в базе +7 часов, но питон отнял их и получил правильное время.
Теперь иду в базу pgadmin-ом пишу insert into таблица_класса values (now()) получаю 1:00 +03. Никаких +7 часов. PostgreSQL работает корректно.
Беру из базы эту запись из питона, через модель.objects.filter получаю на выходе время 18:00 предыдущего дня - т.е. питон отнимает 7 часов от того что в базе!
Откуда взялись эти 7 часов разницы?
Пока не требовались прямые sql запросы в базу все было ок - через объекты сохраняет с +7 часов, возвращает делает -7 часов. Но когда понадобилось сравнивать даты в SQL все поплыло - беру из базы время 1:00, хочу получить ту же запись в базе сравнивая в запросе (cursor.connection(…)) и естественно ничего не получаю - я же сравниваю 1:00 с 8:00.
Время с начала эпохи в миллисекундах тоже отличается на 7 часов, хотя оно UTC по-определению. Т.е. в базе реально +7 часов.
Аналог default=datetime.now - auto_now_add=True работает точно так же, +7 часов.
Крыша едет :) Помогите!