我插入表格中的字段类型为“timestamp with time zone”string“1858-11-17 01:09:05 + 0000”并且返回strage格式化值“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
答案 0 :(得分:2)
这是时区的效果。在20世纪初之前,许多国家(如德国或俄罗斯)拥有完全不同的制度,例如“太阳能时间”和“太阳能时间”。这不会干净地转换为UTC。
因此,时区0(当时的GMT,因为还没有UTC)的时间将表示为叶卡捷琳堡(俄罗斯)的当地时间的奇数时间偏移。
+04:02:24
是与UTC相比的实际偏移量。
答案 1 :(得分:-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)
这两个值只是同一时间戳的不同表示。
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)