PostgreSQL日期值更改为太平洋标准时间下午5点后的第二天



每当我在太平洋标准时间下午5点之后创建数据时,manufactured_date列都会更改为下一个日期。

例如,我今天在5:15 pm PST输入了新数据2020-11-05,存储在manufactured_date列中的值是2020-10-06

查询select * from cars给出以下结果

id | car_name | manufactured_date
---------------------------------
1  | Audi     | 11-06-2020
2  | BMW      | 11-06-2020

以下是cars表的属性

column name       | data type
-----------------------------
id                | serial
car_name          | varchar
manufactured_date | date

insert查询是

insert
into
cars (car_name, manufactured_date)
values ('Audi', '11-05-2020');

如何消除此问题?

使用case表达式:

select (case when (now() now() at time zone 'PST')::time >= '17:00:00'::time
then manufactured_date + interval '1 day'
else manufactured_date
end)

问题很可能是服务器在UTC中运行,即列基于UTC而不是PST时区。

为了验证这一点,你可以执行它,它应该根据服务器时区返回当前时间戳:

select now()

这真的很有趣!即使在玩了操作系统时区设置和PGTZ环境变量之后,我也无法在我的虚拟机上重现您的问题。

你能试着不指望隐式数据类型转换吗?在当前的字符串文字之前添加DATE指令可能会有所帮助:

INSERT INTO cars (car_name, manufactured_date)
VALUES ('Audi', DATE '2020-11-05');

最新更新