繁体   English   中英

如何将没有时区的时间戳和代表时区的 integer 转换为 PostgreSQL 中没有时区的新时间戳

[英]How to convert timestamp without timezone and integer representing timezone to a new timestamp without timezone in PostgreSQL

假设我有一个包含两个字段的表:snapshot_date(没有时区的时间戳)和时区(整数),

快照日期 时区
2021-01-12 08:00:00 -3
2021-01-12 00:00:00 -5

我需要从该表中提取本地时间,我尝试使用(EXTRACT (hour from timestamp))::integer + timezone ,这适用于第一行,给出5的小时结果,但第二行你得到-5 ,实际上应该是19 ,因为用时区调整的相应日期是2021-01-11 19:00:00 所以我想做的是计算一个用时区调整的新快照日期,这样我就可以正确提取一小时后的时间。

您需要先将小时数添加到时间戳中,然后提取小时数:

extract(hour from snapshot_date + make_interval(hours => timezone))

就像是:

show timezone; US/Pacific 
select ('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz; 
2021-01-12 03:00:00-08

select extract(hour from('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz);
3

设法通过以下方式获得预期结果:

extract(hour from timestamp + interval '1 hour' * timezone)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM