Форум сайта python.su
0
Добрый день.
Помогите пожалуйста по проблеме следующего характера:
- Есть данные, которые через Джангу загружаются в базу в формате “2015-10-31 17:00:00+03” (aware форма времени).
- PostgreSQL имеет свойство сохранять время в UTC.
- В pgAdmin-е я вижу время не в UTC, а в том виде, в котором было изначально загружено значение, т.е. “2015-10-31 17:00:00+03”.
К примеру я загружаю новые данные, но перед заливкой в БД нужно сравнить эти данные со значениями, которые уже есть в БД. Новая порция идет в формате "2015-10-31 17:00:00+03“, а значения из БД вытягиваются уже в UTC, т.е. ”2015-10-31 14:00:00+00".
Как сделать так, чтоб значение вытягивалось из БД не в UTC, а в том же часовом поясе, в котором и было залито?
Как я понимаю, если pgAdmin мне показывает время в залитом часовом поясе, а не в UTC, то и вытянуть как то из БД можно в том же самом часовом поясе?
test = Shows.objects.get(name='Test') test.date_time # выдает в UTC, а нужно чтоб было +3
Отредактировано TitanFighter (Окт. 29, 2015 21:42:57)
Офлайн
61
посмотрите в сторону
http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
Офлайн
0
ZerG
Я pytz-ом пользуюсь, добавляя часовой пояс значениям, которые заливаются в БД. В ссылке, что вы указали (и я на просторах инета сам находил), как конвертировать значение из UTC в нужный часовой пояс. Мне такое не подходит, так как в БД заливаются даты\время с разными часовыми поясами. Мне нужно именно вытянуть часовой пояс из сохраненного в БД значения, который перед заливкой имел “aware”-тип, т.е. тип datetime с указанным часовым поясом.
Как сейчас происходит:
Мое_время_+3 -> БД Время_UTC+указывается Часовой Пояс
Мне нужно получить все то же самое в обратном порядке, вместо того, как сейчас происходит:
Мое_время_UTC (Без +3) <- БД Время_UTC+указывается Часовой Пояс
Отредактировано TitanFighter (Окт. 29, 2015 21:51:58)
Офлайн
0
Как выяснилось, нету таки возможности вытягивать из БД часовой пояс, который используется внутри данных “дата\время” при записи в БД. Часовой пояс, что используется в “дате\времени” дает только возможность Базе Данных правильно перевести записываемое значение в UTC.
Чтобы из БД получить время не в локальном часовом поясе (там где юзер находится), а в часовом поясе, к которому изначально относятся данные (концерт в другой стране\городе, и нужно знать время начала концерта не по локальному времени юзера, а именно по времени места проведения концерта), нужно в БД добавлять колонку и записывать в нее название часового пояса (аля ‘Europe/Paris’), к которому относится событие и как указано в ссылке выше от ZerG-а, проводить конвертирование.
Офлайн