![]() |
|
Модераторы: LSD |
![]()
|
|
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 3 Всего: 538 |
1. Теперь Москва это UTC+4
2. Попробуй так:
По идее он должен тебе выдать время без указания временной зоны, но по Москве. -------------------- 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. |
|||
|
||||
| evilsoul |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Как я понял по документации функция timezone является синонимом at time zone, во всяком случае отрабатывают они одинаково.
Выдают локальное время. Но проблема в том что указывая зону UTC+3 я получаю время зоны UTC-3, и наоборот. Вот нашел что-то по теме, пишется по разные форматы задания зоны,
Вроде как получается, что postgress принимает в формате POSIX, а не ISO. Или это где то настраивается в каком формате он принимает зону. Если настраивается, то как узнать эту настройку, чтоб я из приложения смог подставлять правильные данные. В той же документации к постгресу есть таблица с синонимами зон, скажем EAT является синонимом UTC+3 по таблице. Делаю запрос
Значения полей dt1 и dt2 различаются, хотя как я понимаю должны быть одинаковые. |
||||
|
|||||
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Вообщем по моему я нашел в чем загвоздка, задать зону в postgres можно тремя способами:
Указав полное название зоны. Указав ее аббревиатуру. Указав зону в формате POSIX А в POSIX, в отличие от ISO, что восточнее нулевого меридиана идет со знаком минус , а западнее со знаком плюс, о чем писалось выше. Всем спасибо за помощь |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 3 Всего: 538 |
Забавно
-------------------- 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. |
|||
|
||||
| bax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 сам выходит, да пусть и добавить эту разницу . создатели, наверно учитовали этот возможность |
|||
|
||||
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Судя по документации к постгресу timestamp with time zone при выборке возвращает локальное время во временной зоне указанной в конфигурации постгреса, если надо получить время в другой зоне, для этого есть команда at time zone.
Прибавить время не проблема, просто был вопрос почему при вызове at time zone если указываешь алиас временной зоны то все нормально, а если указываешь смещение относительно UTC соответствующее этому алиасу, то на выходе получал не то что ожидал. Но упорное вкуривание мануалов расставило все по своим местам |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PostgreSQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |