Преобразование текста во время с часовым поясом - PullRequest
0 голосов
/ 30 мая 2018

Время получения в следующих форматах:

17:42:40 GMT+0300 (EEST)

16:42:40 GMT+0200 (CEST)

12:42:40 GMT-0200 (WGST)

Как преобразовать этот текст в time with timezone 17:42:40+3 тип для вставки в столбец таблицы с таким типом.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Найден лучший результат для всех возможных случаев.

SELECT regexp_matches('17:42:40 GMT+0300 (EEST)', 
'[0-9]{2}:[0-9]{2}:[0-9]{2} GMT[+|-]{1}[0-9]{2}')::text::timetz;
0 голосов
/ 30 мая 2018
t=# select replace('17:42:40 GMT+0300 (EEST)','00 (EEST)','')::timetz;
   replace
-------------
 17:42:40-03
(1 row)

https://www.postgresql.org/docs/current/static/datatype-datetime.html

Другая проблема, о которой следует помнить, заключается в том, что в именах часовых поясов POSIX положительные смещения используются для местоположений запад Гринвича.В любом другом месте PostgreSQL следует соглашению ISO-8601, согласно которому положительные смещения часовых поясов составляют восток Гринвича.

, также вы, вероятно, захотите преобразовать TZ в форму часа: минуты, игнорируя значениев скобках:

t=# select '17:42:40 GMT+03:00'::timetz;
   timetz
-------------
 17:42:40-03
(1 row)
...