有人可以解释我这种反转,我迷失在这里......
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
答案 0 :(得分:5)
此
1970-01-01 00:00:00+01
是ISO 8601 timestamp with a +1 hour offset,+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 style timezones,其中+1表示格林威治的 west :
PostgreSQL将接受STDoffset或STDoffsetDST格式的POSIX风格时区规范,其中STD是区域缩写,offset是以UTC为单位的小时数字偏移
甚至还有警告:
人们应该警惕POSIX风格的时区功能可以导致静默接受虚假输入,因为没有检查区域缩写的合理性。例如,
SET TIMEZONE TO FOOBAR0
将起作用,使用UTC的一个相当特殊的缩写有效地离开系统。另外要记住的一个问题是,在POSIX时区名称中,正偏移用于格林威治以西的位置。在其他地方,PostgreSQL遵循ISO-8601惯例,即正时区偏移位于格林威治以东。
注意西方与东方之间的区别。