谁能给我解释一下这个符号反转,我在这里迷路了…
SELECT EXTRACT(EPOCH FROM '01-01-1970 00:00:00 UTC+01'::timestamp with time zone)
=> 3600
SELECT EXTRACT(EPOCH FROM '1970-01-01 00:00:00+01'::timestamp with time zone)
=> -3600
Postgres 8.3.14
This
1970-01-01 00:00:00+01
是一个ISO 8601时间戳,有+1小时的偏移,+1表示格林威治以东。
中的偏移量01-01-1970 00:00:00 UTC+01
1970-01-01 00:00:00 UTC+01
1970-01-01 00:00:00 XXX+01
1970-01-01 00:00:00 HAHA+01
1970-01-01 00:00:00 Pancakes+01
将被解释为POSIX风格的时区,其中+1表示西格林威治:
PostgreSQL将接受STDoffset或STDoffsetDST形式的posix风格的时区规范,其中STD是一个区域缩写,offset是一个以小时为单位的数值偏移量,从UTC
和那些甚至带有警告:
应该警惕posix风格的时区特性可能导致无声地接受虚假输入,因为没有对区域缩写的合理性进行检查。例如,
SET TIMEZONE TO FOOBAR0
可以工作,使系统有效地使用一个相当特殊的UTC缩写。另一个要记住的问题是,在POSIX时区名称中,正偏移量用于格林威治以西的位置。在其他地方,PostgreSQL遵循ISO-8601约定,正时区偏移量位于格林威治以东。
注意东西方的差异