gpt4 book ai didi

Postgresql 没有正确转换时区

转载 作者:行者123 更新时间:2023-11-29 13:02:59 25 4
gpt4 key购买 nike

我正在构建一个需要处理不同时区的应用程序,包括具有夏令时的时区。我使用 Postgressql 的时区时间戳数据类型存储所有日期/时间,并且所有日期/时间都存储在 UTC 时区中(我修改了 postgresql.conf 中的 timezone 条目)。

这是我创建的示例表:

CREATE TABLE category_city
(
category_city_id serial NOT NULL,
appt_start_time timestamp(0) with time zone,
appt_end_time timestamp(0) with time zone,
appt_days_of_week character varying,
CONSTRAINT category_city_pkey PRIMARY KEY (category_city_id )
);

我一直在使用“美国\埃德蒙顿”时区测试一些转换。目前,该时区比 UTC 晚 6 小时。我在此表中有一个时间戳,其值为 1970-01-01 15:00:00+00

现在我执行这个查询:

SELECT appt_start_time at time zone 'America/Edmonton' as start
FROM category_city

应该给我时间戳1970-01-01 09:00:00+00,但它给我时间戳1970-01- 01 08:00:00+00,偏移量为 -7。这是不在 DST 时的正确偏移量,但现在显然不正确(DST 有效)。

我肯定遗漏了什么,因为我确定我不是唯一需要使用 DST 处理不同时区的人。

我服务器上的时间是正确的,这是 Ubuntu 上 date 命令的输出:

2014 年 4 月 30 日星期三 17:11:59 MDT

任何人都可以看到我忽略的东西,或者有任何类似的经历并找到解决方法吗?任何帮助将不胜感激!

最佳答案

1970-01-01 09:00:00+00 时区 'America/Edmonton' 的时间是 1970-01-01 08 :00:00 不管你什么时候问。如果您想要特定时区的时间,则需要明确说明:

select '1970-01-01 15:00:00+00' at time zone 'MST' as start;
start
---------------------
1970-01-01 08:00:00

select '1970-01-01 15:00:00+00' at time zone 'MDT' as start;
start
---------------------
1970-01-01 09:00:00

我想在上面很容易看出为什么 MDT 时区的时间总是相同。

关于Postgresql 没有正确转换时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com