Часовой пояс с переходом на летнее время в PostgreSQL

Мы устанавливаем наши собственные водомеры (очень похожие на этот водомер Геологической службы США: http://waterdata.usgs.gov/usa /nwis/uv?site_no=03539600), чтобы мы, байдарочники, знали, достаточно ли воды, чтобы плыть по течению, и не тратили время и бензин на поездку туда. Мы надеемся установить несколько из них в юго-восточном регионе Уайтуотер, который охватывает восточный и центральный часовые пояса.

Я сохраняю время вставки записи, используя для записи значение по умолчанию current_time. Я хотел бы позже отобразить данные, используя формат MM/DD/YYYY HH12:MI AM TZ, который выводит чтение как 12/03/2012 01:00 AM CDT. Я также хотел бы, чтобы выходные данные знали об изменениях летнего времени, поэтому последняя часть предыдущего предложения менялась бы между CST и CDT, когда мы «прыгаем вперед» и «откатываемся». Это изменение произошло 11 марта 2012 года, и ниже я указал даты по обе стороны от этой строки перехода на летнее время. Я использую свой ноутбук с Windows 7 для разработки, и позже мы будем развертывать его на Unix-системе. Postgres, по-видимому, обнаружил, что мой компьютер с Windows настроен на восточный часовой пояс США. Я пытаюсь это сделать с полем «отметка времени без часового пояса» и полем «отметка времени с часовым поясом», но не могу заставить его работать.

Я пытался использовать «в часовом поясе» в своих выборках, и все работало до тех пор, пока не пришло время отображать часовой пояс. Фактический час является частью метки времени, правильно вычитается часом, когда я запрашиваю время в CDT. Но EDT отображается в выводе.

SELECT reading_time as raw,
       reading_time at time zone 'CDT',
       to_char(reading_time at time zone 'CDT',
           'MM/DD/YYYY HH12:MI AM TZ') as formatted_time
  FROM readings2;

"2012-04-29 17:59:35.65";"2012-04-29 18:59:35.65-04";"04/29/2012 06:59 PM EDT"
"2012-04-29 17:59:40.19";"2012-04-29 18:59:40.19-04";"04/29/2012 06:59 PM EDT"
"2012-03-10 00:00:00";"2012-03-10 00:00:00-05";"03/10/2012 12:00 AM EST"
"2012-03-11 00:00:00";"2012-03-11 00:00:00-05";"03/11/2012 12:00 AM EST"
"2012-03-12 00:00:00";"2012-03-12 01:00:00-04";"03/12/2012 01:00 AM EDT"

Я сохраняю часовой пояс, в котором каждый из наших датчиков находится в символьном изменяющемся поле отдельной таблицы. Я решил просто добавить это значение в конец вывода времени, но я хочу, чтобы оно изменилось с CST на CDT без моего вмешательства.

Спасибо за помощь.

12
задан vyegorov 30 April 2012 в 13:36
поделиться