如果我不想在服务器的时区进行计算,那么将指定间隔添加到带时区的时间戳的最佳方法是什么。这在夏令时过渡期间尤为重要。
例如,考虑我们“向前冲”的那个晚上。(在多伦多,我想是 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)