时区操作可以在PostgreSQL中完成吗?PostgreSQL可以访问当前用户的时区吗?



我将日期存储为DATE06-JUN-2022.

我需要将其更改为时间戳,并使时间相当于用户所在时区的纽约上午9点:

  • 对于犹他州的用户(比纽约晚2小时),时间将被设置为上午7点,因为当犹他州早上7点时,纽约早上9点。
  • 对于加利福尼亚(比纽约晚3小时)的用户,时间将被设置为上午6点,因为当加利福尼亚是早上6点时,纽约是上午9点。

我很容易在前端的JavaScript中使用date-fns-tz做到这一点当我的计算机的时间被手动设置为犹他州时间,当给定日期06-JUN-2022时,返回值是Mon Jun 06 2022 07:00:00 GMT-0600,这正是我想要的。代码如下:

const { zonedTimeToUtc } = require("date-fns-tz");
export function fixTimeZone(date) {
let currentTimeStamp = new Date((date += " 09:00::00"));
let correctTimeStamp = zonedTimeToUtc(currentTimeStamp, "America/New_York");
return correctTimeStamp;
}
在PostgreSQL中是否有一种方法可以实现类似的结果,以便在发送给客户端之前将日期转换为具有正确更改时间的时间戳?PostgreSQL是否可以访问用户的时区,或者必须在前端完成?

类似于


select 
('06-JUN-2022'::date + time '9:00') 
at time zone 'America/New_York' AT TIME ZONE 'America/Denver';
timezone       
---------------------
06/06/2022 07:00:00

select 
('06-JUN-2022'::date + time '9:00') 
at time zone 'America/New_York' AT TIME ZONE 'America/Los_Angeles';
timezone       
---------------------
06/06/2022 06:00:00

参见AT TIME ZONE获取更多信息。

最新更新