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.
Историческую справку "что за фигня" и "почему так" дать не смогу.