#postgresql #timezone #timestamp #utc
#postgresql #Часовой пояс #временная метка #utc
Вопрос:
У меня есть база данных PostgreSQL со многими таблицами, в которых хранятся временные метки по местному времени Сиднея / Австралии. Кроме того, у меня есть одна таблица, в которой хранятся временные метки в UTC. Это нельзя изменить.
Мой вопрос — какие манипуляции с SQL мне нужно использовать, чтобы получить временные метки UTC по местному времени Сиднея / Австралии?
Я осознаю тот факт, что в Сиднее есть периоды перехода на летнее время, и я не уверен, как написать свой SQL, чтобы преобразование всегда было правильным — независимо от того, была ли временная метка взята во время перехода на летнее время или нет.
Пожалуйста, сообщите.
Спасибо, Амит
Ответ №1:
используйте at time zone
, как:
t=# select now() at time zone 'AEDT';
-[ RECORD 1 ]------------------------
timezone | 2016-10-11 08:20:39.067256
Time: 2.439 ms
например, существует устаревший список часовых
поясов или просто используйте pg_timezone_names
:
t=# select * from pg_timezone_names() where name ilike '%sydney%';
-[ RECORD 1 ]----------------------
name | posix/Australia/Sydney
abbrev | AEDT
utc_offset | 11:00:00
is_dst | t
-[ RECORD 2 ]----------------------
name | Australia/Sydney
abbrev | AEDT
utc_offset | 11:00:00
is_dst | t
Time: 171.649 ms
Комментарии:
1. Итак, предполагая, что у меня есть 2 следующие записи:
2. если у вас есть версия до версии 9.0 (которая есть
pg_timezone_names
), используйте веб-ссылку выше