Найти - Пользователи
Полная версия: Сохранение времени в базе дает +7 часов
Начало » Базы данных » Сохранение времени в базе дает +7 часов
1
Nikita
Привет,

В питоне 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 часов.

Крыша едет :) Помогите!
Nikita
Нашел решение.
В джанго в сеттингз была прописана TIMEZONE “US/Eastern”. И при сохранении объектов в базу передается время относительно этой зоны, те самые +7 часов. А база думает что это время UTC без сдвига.
Если вписать мою таймзону в джанго, то в базу попадает правильное время.
А как оно будет работать у коллег в другой зоне кто его знает ..
pill
На эту тему кстати была очень хорошая статейка: http://asvetlov.blogspot.com/2011/02/date-and-time.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB