2014-01-20 7 views
2

Я запускаю базу данных Postgres 8.3, где время, похоже, хранится в UTC без часового пояса. Я пытаюсь отобразить местное время, но не с «+01» суффикса:. Время перелета по UTC по местному времени в PostgreSQL. 8.3

С отборных scheduled_start_ts я получаю: 2014-01-20 05: 01: 35,663

С отборных scheduled_start_ts в часовом поясе " MET ': 2014-01-20 05: 01: 35.663 + 01

Я хотел бы получить «2014-01-20 06: 01: 35.663», который находится по местному времени.

База данных, которую я использую, не может быть изменена, и мне не разрешено изменять способ хранения данных.

+1

Не имеет отношения к вашей проблеме, но Postgres устарел и больше не поддерживается. Вы действительно должны запланировать обновление до версии 9.x. –

+0

Вы правы, но я являюсь только пользователем этой базы данных, снабженной ее приложением. Я могу просто запросить, не писать и не обновлять. – Bruno

ответ

1

Если вы хотите форматировать время, используйте функцию to_char. См. formatting functions в документах.

regress=> SELECT to_char( 
    (TIMESTAMP '2014-01-20 05:01:35.663' AT TIME ZONE 'UTC') 
    AT TIME ZONE 'MET', 
    'YYYY-MM-DD HH:MI:SS' 
    ); 

     to_char  
--------------------- 
2014-01-20 06:01:35 
(1 row) 

(TIMESTAMP 'xxx' AT TIME ZONE 'UTC') получает мне timestamptz с правильным временем, по реинтерпретацииTIMESTAMP как в UTC. Второй AT TIME STAMP вместо преобразует timestamptz в timestamp во временной зоне MET. Затем это форматируется.

Независимо от того, что купили стандарты стандартов SQL, когда они это разработали, я никогда не хотел когда-либо быть рядом с ним.

+0

Я просто попробовал, и он хорошо работает, спасибо большое – Bruno

+0

@Bruno Рад это услышать. Пожалуйста, подумайте о принятии ответа (отметьте, вверху слева), чтобы сэкономить время. –

Смежные вопросы