Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос timezone 
V
    Опции темы
evilsoul
Дата 13.7.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Вопрос такой, есть поле 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

PM MAIL   Вверх
LSD
Дата 13.7.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 538



1. Теперь Москва это UTC+4 smile
2. Попробуй так:
Код

select dt_field at time zone 'UTC+04' from ...

По идее он должен тебе выдать время без указания временной зоны, но по Москве.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
evilsoul
Дата 13.7.2011, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Как я понял по документации функция timezone является синонимом at time zone, во всяком случае отрабатывают они одинаково.
Выдают локальное время. Но проблема в том что указывая зону UTC+3 я получаю время зоны UTC-3, и наоборот.

Вот нашел что-то по теме, пишется по разные форматы задания зоны, 

Цитата

'GMT+3' это идентификатор зоны в формате POSIX, а в идентификаторах зоны по POSIX'у положительное смещение используется для местоположений западней гринвича (наоборот по сравнению с ISO). соответственно, если Вы хотите вводить в формате POSIX — Вам нужно писать GMT-3 в качестве имени зоны.


Вроде как получается, что postgress принимает в формате POSIX, а не ISO. Или это где то настраивается в каком формате он принимает зону.
Если настраивается, то как узнать эту настройку, чтоб я из приложения смог подставлять правильные данные.

В той же документации к постгресу есть таблица с синонимами зон, скажем EAT является синонимом UTC+3  по таблице.
Делаю запрос
Код

select dt, dt at time zone 'EAT' as dt1, dt at time zone 'UTC+3' as dt2 from table


Значения полей dt1 и dt2 различаются, хотя как я понимаю должны быть одинаковые.

PM MAIL   Вверх
evilsoul
Дата 14.7.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Вообщем по моему я нашел в чем загвоздка, задать зону в  postgres можно тремя способами:
Указав полное название зоны.
Указав ее аббревиатуру.
Указав зону в формате POSIX

А в POSIX, в отличие от ISO, что восточнее нулевого меридиана идет со знаком минус , а западнее со знаком плюс, 
о чем писалось выше.

Всем спасибо за помощь

PM MAIL   Вверх
LSD
Дата 15.7.2011, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 538



Забавно smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bax
Дата 29.7.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 4.5.2007

Репутация: нет
Всего: 1



не продумано, наверно 
у меня дата приходит в следующем формате "2011-07-29 10:19:35+05"
+05 это +5часов восточнее Гринвича
Возможно, существует набор команд для ввывода  эту дату 
"2011-07-29 10:19:35" (Гринвичевское время) или  "2011-07-29 15:19:35"  (местная) ввиде
А ведь, +5 сам выходит, да пусть и добавить эту разницу . создатели, наверно учитовали этот возможность
PM MAIL   Вверх
evilsoul
Дата 30.7.2011, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Судя по документации к постгресу timestamp with time zone при выборке возвращает локальное время во временной зоне указанной в конфигурации постгреса, если надо получить время в другой зоне, для этого есть команда at time zone.


Прибавить время не проблема, просто был вопрос почему при вызове at time zone если указываешь алиас временной зоны то все нормально, а если указываешь смещение относительно UTC соответствующее этому алиасу, то на выходе получал не то что ожидал.

Но упорное вкуривание мануалов расставило все по своим местам

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.