小编djm*_*ris的帖子

PostgreSQL:为不同时区的时间戳添加间隔

如果我不想在服务器的时区进行计算,那么将指定间隔添加到带时区的时间戳的最佳方法是什么。这在夏令时过渡期间尤为重要。

例如,考虑我们“向前冲”的那个晚上。(在多伦多,我想是 2016 年 3 月 13 日凌晨 2 点)。
如果我拿一个时间戳: 2016-03-13 00:00:00-05 并添加'1 day'到它,在加拿大/东部,我希望得到2016-03-14 00:00:00-04-> 1 天后,但实际上只有 23 小时但是如果我在萨斯喀彻温省(一个没有使用 DST),我希望它增加 24 小时,这样我最终会得到 2016-03-13 01:00:00-04.

如果我有列/变量

t1 timestamp with time zone;
t2 timestamp with time zone;
step interval; 
zoneid text; --represents the time zone
Run Code Online (Sandbox Code Playgroud)

我基本上想说

t2 = t1 + step; --in a time zone of my choosing
Run Code Online (Sandbox Code Playgroud)

Postgres 文档似乎表明带时区的时间戳在内部以 UTC 时间存储,这似乎表明 timestamptz 列中没有计算时区。SQL 标准指出 datetime + interval 操作应该保持第一个操作数的时区。

t2 = (t1 AT TIME ZONE zoneid …
Run Code Online (Sandbox Code Playgroud)

sql postgresql timezone plpgsql dst

4
推荐指数
1
解决办法
4798
查看次数

标签 统计

dst ×1

plpgsql ×1

postgresql ×1

sql ×1

timezone ×1