為什麼我會看到 PgAdmin 中顯示的時區偏移量,以獲取帶有時區的時間戳
我正在使用 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。
我做了以下事情:
CREATE TABLE t ( x TIMESTAMPTZ NOT NULL );
然後
INSERT INTO t VALUES (NOW());
然後在 pgAdmin 中,我
SELECT * FROM t
和我看到的值是x timestamp with timezone 2022-03-09 05:15:02.899933+00
注意時區:2022-03-09 05:15:02.899933
+00
- 因為我在 UTC/GMT。美好的。我檢查了我的
postgresql.conf
,我有timezone = 'Europe/Dublin'
。為了仔細檢查,我查看了命令行:
postgres=# SELECT * FROM pg_timezone_names WHERE name = current_setting('TIMEZONE'); name | abbrev | utc_offset | is_dst ---------------+--------+------------+-------- Europe/Dublin | GMT | 00:00:00 | t (1 row)
所以,腰帶和背帶:
postgres=# SELECT name, setting, unit, short_desc FROM pg_settings WHERE setting LIKE '%ublin%'; name | setting | unit | short_desc ----------+---------------+------+----------------------------------------------------------------- TimeZone | Europe/Dublin | | Sets the time zone for displaying and interpreting time stamps. (1 row)
注意
short_desc
欄位:Sets the time zone for displaying and interpreting time stamps.
現在,我編輯我
postgresql.conf
的並將時區更改為America/Los_Angeles
並重新啟動我的伺服器!現在,如果我這樣做
SELECT * FROM t;
,它會給我:2022-03-08 21:15:02.899933-08
比較一下
2022-03-09 05:15:02.899933+00
- 它們是相同的時間- 只是顯示不同 -完全取決於我的postgresql.conf
設置!大概這是為了讓顯示的時間對那些查看它們的人來說是有意義的。人們不會認為他們在半夜有約會。如果不習慣它們,可以很容易地跳過顯示的日期時間/時間戳的時區部分。
我可以想到一個例子,說明始終以 UTC/Zulu顯示可能是個好主意,那就是在民用航空中,始終以 Zulu 給出所有時間(您會經常看到 YYYY-MM-DD HH: MM:SS
Z
寫的)。回答:
是的,它是決定時間顯示給你的
timezone
設置!價值是不可變的!postgresql.conf``TIMESTAMPTZ
你說:
我假設我在 PgAdmin 中看到偏移量的原因是 PgAdmin 正在顯示儲存值的轉換版本,該版本基於儲存在 postgresql.conf 中的數據庫主機系統的時區資訊。誰能確認這是否是 PgAdmin 在顯示具有時區數據類型時間戳的數據時所做的事情?
當我在這台機器上安裝 Windows 時,我選擇了 PC 的時區,
Dublin, Edinburgh, Lisbon, London
當我安裝 PostgreSQL 時,時區postgresql.conf
設置為Europe/London
- 我將其重置為Europe/Dublin
. PostgreSQL 顯然會根據您的系統設置做出它認為的最佳猜測。但是,正如您從上面看到的,很容易改變這一點。