Да, это действительно интересно. Я мог бы воспроизвести это:
SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DDTHH24:MI:SSZ')
дает
2018-11-01STH24:21:24Z -- note the S
А
SELECT to_char('2018-11-04 15:21:24'::timestamp, 'YYYY-MM-DDTHH24:MI:SSZ')
т
2018-11-04THH24:21:24Z -- note that THH still seems to remain as in the format string
Проблема здесь заключается в значении формата TH
. Эта строка интерпретируется как «суффикс порядкового номера». Он добавляет суффиксы «ST», «ND», «RD» и «TH» для «первого», «второго», «третьего», «четвертого» и других. В вашей строке формата это сочетается с вашим T
и строкой формата HH24
.
См:
SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DDTH')
дает
2018-11-01ST
и
SELECT to_char('2018-11-04 15:21:24'::timestamp, 'YYYY-MM-DDTH')
дает
2018-11-04TH
Так что на самом деле ваши примеры выше могут быть объяснены. S
на самом деле является ST
, H24
- это не интерпретируемый остаток THH24
(где TH
уже взят за порядковый суффикс). То же самое со вторым примером, где TH
снова преобразуется в TH
, поэтому он, кажется, игнорируется.
Ваше решение заключает T в двойные кавычки:
SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DD"T"HH24:MI:SSZ')
, что дает:
2018-11-01T15:21:24Z
демо: дб <> скрипка
форматирование даты Postgres