postgresql - 中非时间 (CAT) PostgreSQL TIMESTAMPTZ 转换是否存在问题?

标签 postgresql timezone

我们在刚果的一个 PostgreSQL 11.4 部署使用了 CAT 时区(非洲/基加利 +02),并且在尝试将人工输入的时间戳转换为实际的 TIMESTAMPTZ 数据时我们的一个函数阻塞。

例如:

SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ;
ERROR:  invalid input syntax for type timestamp with time zone: "2019-10-17 00:00:00 CAT"
LINE 2: SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ
               ^
SQL state: 22007
Character: 9

但是当我尝试使用 CEST(中欧语,也是 +02)时,它起作用了。

SELECT '2019-10-17 00:00:00 CEST'::TIMESTAMPTZ;
"2019-10-17 00:00:00+02"

顺便说一下,从 epoch 转换为 CAT 也可以

select to_timestamp(1571263200);
"2019-10-17 00:00:00+02"

版本: “x86_64-pc-linux-gnu 上的 PostgreSQL 11.4 (Ubuntu 11.4-1.pgdg18.04+1),由 gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0,64 位编译” 在 Ubuntu 18.04.2 LTS 上

最佳答案

无论出于何种原因,'CAT' 默认情况下对于输入无效,大概是有人觉得它有歧义之类的。您可以附加行

CAT      7200    # Central Africa Time

到文件“$SHAREDIR/timezonesets/Default”以使其工作。

或者您可以创建一个包含以下内容的文件“$SHAREDIR/timezonesets/Africa”:

@INCLUDE Default
@OVERRIDE
CAT      7200    # Central Africa Time

然后将参数 timezone_abbreviations 设置为 'Africa'。

我不是钟表学家,你可能想在盲目添加之前研究一下为什么缺少 CAT。另外,如果你走上述任何一条路线,你应该在某个地方清楚地记录下来。您将需要重复升级 PostgreSQL、还原或移动数据库时执行的步骤。

或者,您可以预处理用户输入,将“CAT”替换为“Africa/Kigali”。

Incidentally, converting from epoch to CAT also works

select to_timestamp(1571263200);
"2019-10-17 00:00:00+02"

'CAT' 没有出现在您的示例中。所以不清楚这是什么例子。

关于postgresql - 中非时间 (CAT) PostgreSQL TIMESTAMPTZ 转换是否存在问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417452/

相关文章:

sql - 查找 PostgreSQL 中日期的中位数

mysql - 更改 MySQL 插入请求中的时区?

postgresql - 将日期时间列转换为不同时区的查询

spring-data-jpa - 在 @jsonformat 中设置 timezone = "Asia/Kolkata"并将其存储在 java.sql.timestamp 中将在 Spring Hibernate 中将中午 12 点转换为下午 1 点,timesatmp 转换为上午 00 点

sql - PostgreSQL 值 1 和 11 的差异

java - 由 : org. postgresql.util.PSQLException 引起:尝试自动创建数据库时数据库不存在

java - 如何用JDBC调用PostgreSQL存储过程

java.lang.ClassNotFoundException : org. postgresql.Driver问题

python - Mongo 对象 ID : "can' t compare offset-naive and offset-aware datetimes"even with pytz

java - 如何在java中将一个时区的纪元时间转换为另一个时区的纪元时间?