Мой сервер находится в центральном времени. Я хотел бы сделать временные метки с использованием восточного времени.PostgreSQL - как сделать дату в другом часовом поясе?
Например, я хотел бы оказать 2012-05-29 15:00:00
как 2012-05-29 16:00:00 EDT
.
Как я могу это достичь?
to_char('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')
дает 2012-05-29 16:00:00
(без зоны).
to_char('2012-05-29 15:00:00'::timestamp at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')
дает 2012-05-29 14:00:00 CDT
(неверно).
Это один работает, но это так нелепо сложным должно быть проще: replace(replace(to_char(('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT')::timestamptz, 'YYYY-MM-DD HH24:MI:SS TZ'), 'CST', 'EST'), 'CDT', 'EDT')
Как сервер должен знать, какой часовой пояс * сокращение * вы хотите отобразить ? Он знает только часовой пояс * смещение * –
Информация о часовом поясе не является черной магией. Нет никаких технических причин, из-за которых невозможно (или даже трудно) сказать, что 5/29 - это летнее время в Восточном времени. На самом деле PG знает все это - 'to_char (x, 'TZ')' правильно отличает CST от CDT, а 'в часовом поясе EST5EDT' также относится к DST. Единственный бит, которого я пропускаю, - это элегантный рендеринг с использованием этой информации. –
Проблема заключается в странном выборе разработчиков Postgres, что 'timestamp с часовым поясом в _zone_' должен преобразовывать часовые пояса, но возвращать' timestamp без часового пояса'. – lanzz