| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PostgreSQL > Вопрос timezone |
| Автор: evilsoul 13.7.2011, 15:09 |
| Вопрос такой, есть поле timestamptz со значением "2011-07-13 17:01:20.571133+06" Скажем мне надо перевести это время в московское Пытаюсь сделать так timezone('UTC+03:00', dt_field) то получаю "2011-07-13 07:01:20.571133", по идее UTC+3 зона в которой находится Москва Делаю timezone('UTC-03:00', dt_field) то получаю московское время "2011-07-13 13:01:20.571133" То есть в timestamp зона указывается если на восток то плюс если на запад то минус. а при получении локального времени в нужной мне часовой зоне указывать зоны наоборот. Работает, но от меня ускользает логика такого поведения, документации читал, но какого-то внятного объяснения не нашёл. Хотелось бы разобраться раз и навсегда, как правильно получать локальное время в нужной зоне. Там можно в принципе указывать синонимы, но они не все работали на часть из них postgres ругался, поэтому хотелось бы указывать просто смещение по времени относительно UTC |
| Автор: LSD 13.7.2011, 16:04 | ||
| 1. Теперь Москва это UTC+4 2. Попробуй так:
По идее он должен тебе выдать время без указания временной зоны, но по Москве. |
| Автор: evilsoul 13.7.2011, 22:48 | ||||
| Как я понял по документации функция timezone является синонимом at time zone, во всяком случае отрабатывают они одинаково. Выдают локальное время. Но проблема в том что указывая зону UTC+3 я получаю время зоны UTC-3, и наоборот. Вот нашел что-то по теме, пишется по разные форматы задания зоны,
Вроде как получается, что postgress принимает в формате POSIX, а не ISO. Или это где то настраивается в каком формате он принимает зону. Если настраивается, то как узнать эту настройку, чтоб я из приложения смог подставлять правильные данные. В той же документации к постгресу есть таблица с синонимами зон, скажем EAT является синонимом UTC+3 по таблице. Делаю запрос
Значения полей dt1 и dt2 различаются, хотя как я понимаю должны быть одинаковые. |
| Автор: evilsoul 14.7.2011, 20:16 |
| Вообщем по моему я нашел в чем загвоздка, задать зону в postgres можно тремя способами: Указав полное название зоны. Указав ее аббревиатуру. Указав зону в формате POSIX А в POSIX, в отличие от ISO, что восточнее нулевого меридиана идет со знаком минус , а западнее со знаком плюс, о чем писалось выше. Всем спасибо за помощь |
| Автор: LSD 15.7.2011, 10:09 |
| Забавно |
| Автор: bax 29.7.2011, 14:19 |
| не продумано, наверно у меня дата приходит в следующем формате "2011-07-29 10:19:35+05" +05 это +5часов восточнее Гринвича Возможно, существует набор команд для ввывода эту дату "2011-07-29 10:19:35" (Гринвичевское время) или "2011-07-29 15:19:35" (местная) ввиде А ведь, +5 сам выходит, да пусть и добавить эту разницу . создатели, наверно учитовали этот возможность |
| Автор: evilsoul 30.7.2011, 07:52 |
| Судя по документации к постгресу timestamp with time zone при выборке возвращает локальное время во временной зоне указанной в конфигурации постгреса, если надо получить время в другой зоне, для этого есть команда at time zone. Прибавить время не проблема, просто был вопрос почему при вызове at time zone если указываешь алиас временной зоны то все нормально, а если указываешь смещение относительно UTC соответствующее этому алиасу, то на выходе получал не то что ожидал. Но упорное вкуривание мануалов расставило все по своим местам |