2016-10-11 1 views
2

У меня есть PostgreSQL DB со многими таблицами, которые хранят временные метки в Сиднее/Австралии по местному времени. Кроме того, у меня есть одна таблица, в которой хранятся временные метки в UTC. Это невозможно изменить.postgresql: как преобразовать отметку времени UTC в Сиднейское время

Мой вопрос: Какие SQL-манипуляции мне нужно использовать, чтобы получить временные метки UTC в местном Sydney/Australia time?

Я осознаю тот факт, что Сидней имеет периоды летнего сбережения, и я не уверен, как писать свой SQL так, чтобы преобразование всегда было правильным - независимо от того, была ли отметка времени сделана в летнее время или нет ,

Просьба сообщить.

Спасибо, Amit

ответ

4

использование at time zone как:

pond93=# select now() at time zone 'AEDT'; 
-[ RECORD 1 ]------------------------ 
timezone | 2016-10-11 08:20:39.067256 

Time: 2.439 ms 

есть outdated list of timezones, например или просто использовать pg_timezone_names:

pond93=# 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 
+0

Так предполагая, у меня есть 2 следующие записи: – Aamit

+0

, если у вас есть pre 9.0 release (у которого есть 'pg_timezone_names'), то используйте веб-ссылку выше –

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