4

フィールド タイプ「タイム ゾーン付きタイムスタンプ」文字列「1858-11-17 01:09:05+0000」をテーブルに挿入し、ストレージ形式の値「05:11:29+04:02:24」を取得しています。

セッションはこちら

test=> create table ddtbl (val timestamp with time zone);
CREATE TABLE
test=> insert into ddtbl (val) values ('1858-11-17 01:09:05+0000');
INSERT 0 1
test=> select * from ddtbl;
             val              
------------------------------
 1858-11-17 05:11:29+04:02:24

なぜこれが起こっているのですか?ここで「+04:02:24」とは何ですか?

UPD: PostgreSQL のバージョン

% psql --version
psql (PostgreSQL) 9.2.4

UPD2: ローカル タイムゾーン

% date +%Z
YEKT
% date +%z
+0600
4

2 に答える 2

2

これはタイムゾーンの影響です。20 世紀初頭まで、多くの国 (ドイツやロシアなど) は、UTC にきれいに変換されない「平均太陽時」のような完全に異なる制度を持っていました。

したがって、タイム ゾーン 0 (UTC がまだなかったため、当時は GMT) の時間は、エカテリンブルグ (ロシア) の現地時間として表されると、奇妙な時間オフセットになります。

+04:02:24UTC と比較した実際のオフセットです。

于 2013-05-15T19:38:44.753 に答える
-1

入力値がUTCであると解釈しています。

psql=# select cast('1858-11-17 01:09:05 UTC' as timestamp with time zone);
      timestamptz       
------------------------
 1858-11-17 01:09:05+00
(1 row)


psql=# select cast('1858-11-17 01:09:05 BRT' as timestamp with time zone);
      timestamptz       
------------------------
 1858-11-17 04:09:05+00
(1 row)

2 つの値は、同じタイムスタンプの異なる表現です。

psql=# select cast('1858-11-17 05:11:29+04:02:24' as timestamp with time zone) = cast('1858-11-17 01:09:05+0000' as timestamp with time zone);
 ?column? 
----------
 t
(1 row)
于 2013-05-15T19:12:11.093 に答える