是的,这真的很有趣。我可以重现它:
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
demo:db<>fiddle
Postgres date formatting