В PostgreSQL смещение часового пояса берется с неправильным знаком - PullRequest
1 голос
/ 20 мая 2019

Я экспериментирую с типом данных PostgreSQL TIME и замечаю странное поведение.

test=# SELECT CURRENT_TIME;
current_time
--------------------
08:43:35.446737+00
(1 row)

test=# SELECT CURRENT_TIME  AT TIME ZONE '+04';
timezone
--------------------
04:43:50.475164-04
(1 row)

test=# SELECT CURRENT_TIME  AT TIME ZONE '-04';
  timezone
--------------------
12:43:54.810124+04
(1 row)

Как вы можете заметить, часовой пояс по умолчанию равен 00 , поэтому при преобразованииэто + 04 , я ожидаю получить результат, который получу при конвертации с -04

Кто-нибудь знаком с причинами такого поведения или этоошибка

1 Ответ

1 голос
/ 20 мая 2019

Вы используете имена часовых поясов в стиле POSIX, которые немного странно работают.Начиная с документов :

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

Кроме того, из тех же документов:

Мы не рекомендуем использоватьвведите время с часовым поясом (хотя он поддерживается PostgreSQL для устаревших приложений и для соответствия стандарту SQL).

...