TimeTZ at time zone неправильно понимает таймзону

Имеется простой SQL запрос:

SELECT '06:00:00 +0600'::timetz at time zone '-05:00',
       '06:00:00 +0600'::timetz at time zone '+05:00'

Ожидаю в ответ получить

+---------------+---------------+
|timezone       |timezone       |
+---------------+---------------+
|19:00:00 -05:00|05:00:00 +05:00|
+---------------+---------------+

Но PostgreSQL выдает обратный результат:

+---------------+---------------+
|timezone       |timezone       |
+---------------+---------------+
|05:00:00 +05:00|19:00:00 -05:00|
+---------------+---------------+

Подскажите пожалуйста, в чем причина такой проблемы. Спасибо.


Ответы (1 шт):

Автор решения: Мелкий

The offset fields specify the hours, and optionally minutes and seconds, difference from UTC. They have the format hh[:mm[:ss]] optionally with a leading sign (+ or -). The positive sign is used for zones west of Greenwich. (Note that this is the opposite of the ISO-8601 sign convention used elsewhere in PostgreSQL.)

https://www.postgresql.org/docs/current/datetime-posix-timezone-specs.html

Указание таймзоны как интервал времени использует правила POSIX. Значение положительных и отрицательных смещений в нём инвертировано относительно более привычных правил именования в ISO-8601.

Историческую справку "что за фигня" и "почему так" дать не смогу.

→ Ссылка