我有一个返回“太平洋标准时间”等时区的api。
我想在“时区”中使用该格式。当我尝试
选择'2020-11-01T18:46:00':: timestamptz AT TIME ZONE'Pacific Standard Time'
我收到错误消息:无法识别时区“太平洋标准时间”
我需要“太平洋标准时间”看起来像“美国/太平洋”或“美国/洛杉矶”
我已经看到了Postgres内置的pg_timezone_names表,但是在其中找不到“ Pacific Stanard Time”。关于将其转换为可与Postgres一起使用的类型的任何建议?
根据问题聊天中的讨论,我们假设您的输入值是所有Windows时区标识符。
Windows和IANA标识符之间进行转换的真实来源是windowsZones.xml
文件,它是Unicode CLDR项目的一部分。
您可以使用Postgres的xml功能(例如xmlparse
和)从此文件中解析必要的数据xmltable
。
CREATE TABLE zone_mapping AS
SELECT xmltable.*
FROM XMLPARSE (DOCUMENT '...put xml here...')
AS data,
xmltable('//mapZone[@territory = ''001'']'
PASSING data
COLUMNS
windows_zone varchar PATH '@other' not null,
iana_zone varchar PATH '@type' not null
);
然后,您可以查询它,或在您自己的查询中加入它,等等。
select * from zone_mapping;
结果将包含您要查找的值:
windows_zone iana_zone
-----------------------------------------------
...
Pacific Standard Time America/Los_Angeles
...
在这里工作(请单击顶部的运行)。
请注意,通过过滤到“ 001”区域(称为“黄金区域”),映射表将仅在Windows到IANA的方向上起作用。如果您需要朝另一个方向发展,那么它将变得更加复杂,因为您不仅需要考虑其他条目,而且还必须使用其他数据源扩展到所有IANA别名(链接)。
还要注意,在粘贴xml时,您需要将所有'
字符替换''
为查询。当前文件中只有一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句