Postgres to_timestamp 将时区设置为 +1

Posted

技术标签:

【中文标题】Postgres to_timestamp 将时区设置为 +1【英文标题】:Postgres to_timestamp setting timezone to +1 【发布时间】:2021-02-16 16:11:27 【问题描述】:

我正在使用 Postgres 中的 to_timestamp 函数将整数值转换为时间戳。当我这样做时,时区设置为 +1,存储时间增加一小时。

我位于英国,因此当前时区偏移量应为 +0,而不是 +1。

有谁知道如何手动停止/设置时区?

例子:

UPDATE my_table SET date_time_updated = to_timestamp(0) where id = 1;
SELECT date_time_updated FROM my_table WHERE id = 1; //Would expect midnight 01/01/1970

   date_time_updated
------------------------
 1970-01-01 01:00:00+01
(1 row)

【问题讨论】:

为什么用整数混淆?为什么不使用date_time_update = timestamp '1970-01-01 00:00:00'?或者甚至更好date_time_update = '-infinity' 对不起,我可能应该解释一下,我需要使用整数,因为我正在使用 javascript 来计算随机纪元时间,然后使用它来设置时间戳。 01/01/1970 只是一个示例,以证明即使我尝试使用 0,它也没有设置为应有的 Unix 纪元(由于时区增加了一个小时)。 它被设置为 Unix 纪元,因为纪元时间在 UTC 时区中总是。试试select extract (epoch from '1970-01-01 01:00:00+01'::timestamptz) - 它返回0。要达到你需要使用select to_timestamp(0)::timestamptz at time zone 'utc' 谢谢,这对我有用 【参考方案1】:

在内部,timestamp with time zone 与时区无关(听起来很奇怪)。

PostgreSQL 将其转换为字符串时,会根据timezone 参数的当前设置对其进行格式化。

所以更改会话的时区

SET timezone = 'Europe/London';

要更改使用的默认值,除非客户端覆盖它,请更改 postgresql.conf 中的参数并重新加载 PostgreSQL。

【讨论】:

以上是关于Postgres to_timestamp 将时区设置为 +1的主要内容,如果未能解决你的问题,请参考以下文章

将 Postgres 中没有时区的 DateTime 字段从中欧时间转换为 UTC

Postgres UTC时区vs当地时区

使用 node-postgres 在 utc 中获取 Postgres“没有时区的时间戳”

Postgres - 将 dateString 转换为 int8

时区感知 postgres 查询为分钟、小时、天创建时间序列

在 Postgres 中创建表时将空列设置为带时区的时间戳