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
使用 node-postgres 在 utc 中获取 Postgres“没有时区的时间戳”
Postgres - 将 dateString 转换为 int8