我正在使用 PgAdmin 4 v6,对于一些数据类型为 的时间戳数据timestamp with time zone
,我在 PgAdmin 中看到它是这样的:
2022-03-06 16:11:33+04
为什么+04
正在显示?
我查看了以下 postgres 指南:
它声明如下:
所有可识别时区的日期和时间都以 UTC 格式在内部存储。在显示给客户端之前,它们会转换为 TimeZone 配置参数指定的区域中的本地时间。
此处的参考说明了有关 Postgres 中 TimeZone 配置的以下内容:
TimeZone (string)
设置显示和解释时间戳的时区。内置默认值是 GMT,但通常在 postgresql.conf 中被覆盖;initdb 将在那里安装与其系统环境相对应的设置。
这表明以某种方式从数据库主机系统派生的时区被添加到 postgresql.conf 中。
我假设我在 PgAdmin 中看到偏移量的原因是 PgAdmin 正在显示存储值的转换版本,该版本基于存储在 postgresql.conf 中的数据库主机系统的时区信息。谁能确认这是否是 PgAdmin 在显示具有数据类型的数据时所做的事情timestamp with timezone
?
我在都柏林 - 目前在 UTC/GMT。
我做了以下事情:
然后
然后在 pgAdmin 中,我
SELECT * FROM t
和我看到的值是注意时区:2022-03-09 05:15:02.899933
+00
- 因为我在 UTC/GMT。美好的。我检查了我的
postgresql.conf
,我有timezone = 'Europe/Dublin'
。为了仔细检查,我查看了命令行:
所以,腰带和背带:
注意
short_desc
字段:现在,我编辑我
postgresql.conf
的并将时区更改为America/Los_Angeles
并重新启动我的服务器!现在,如果我这样做
SELECT * FROM t;
,它会给我:比较一下
2022-03-09 05:15:02.899933+00
- 它们是相同的时间- 只是显示不同 -完全取决于我的postgresql.conf
设置!大概这是为了让显示的时间对那些查看它们的人来说是有意义的。人们不会认为他们在半夜有约会。如果不习惯它们,可以很容易地跳过显示的日期时间/时间戳的时区部分。
我可以想到一个例子,说明始终以 UTC/Zulu显示可能是个好主意,那就是在民用航空中,始终以 Zulu 给出所有时间(您会经常看到 YYYY-MM-DD HH: MM:SS
Z
写的)。回答:
是的,它是决定时间显示给你的
timezone
设置!价值是不可变的!postgresql.conf
TIMESTAMPTZ
你说:
当我在这台机器上安装 Windows 时,我选择了 PC 的时区,
Dublin, Edinburgh, Lisbon, London
当我安装 PostgreSQL 时,时区postgresql.conf
设置为Europe/London
- 我将其重置为Europe/Dublin
. PostgreSQL 显然会根据您的系统设置做出它认为的最佳猜测。但是,正如您从上面看到的,很容易改变这一点。