【发布时间】:2014-06-17 10:59:21
【问题描述】:
我正在构建一个需要处理不同时区的应用程序,包括具有夏令时的时区。我使用 Postgressql 的时间戳和 timezone 数据类型存储所有日期/时间,并且所有日期/时间都存储在 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 )
);
我一直在使用“America\Edmonton”时区测试一些转换。目前,该时区比 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 命令的输出:
Wed Apr 30 17:11:59 MDT 2014
任何人都可以看到我忽略的东西,或者有任何人经历过类似的事情并找到解决方法吗?任何帮助将不胜感激!
【问题讨论】:
标签: postgresql timezone dst