Postgres UTC日期格式和纪元演员,签名反转

131*_*131 5 postgresql timezone

有人能解释我这种反转,我迷失在这里......

SELECT EXTRACT(EPOCH FROM '01-01-1970 00:00:00 UTC+01'::timestamp with time zone)
Run Code Online (Sandbox Code Playgroud)

=> 3600

SELECT EXTRACT(EPOCH FROM '1970-01-01 00:00:00+01'::timestamp with time zone)
Run Code Online (Sandbox Code Playgroud)

=> -3600

Postgres 8.3.14

mu *_*ort 5

这个

1970-01-01 00:00:00+01
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

将被解释为POSIX风格的时区,其中+1表示格林威治以西:

PostgreSQL将接受STDoffset或STDoffsetDST形式的POSIX风格时区规范,其中STD是区域缩写,offset是以UTC为单位的数字偏移量,以UTC为单位

那些甚至带来警告:

应该警惕POSIX风格的时区功能可以导致静默接受虚假输入,因为没有检查区域缩写的合理性.例如,SET TIMEZONE TO FOOBAR0将使用UTC的相当特殊的缩写有效地离开系统.另外要记住的一个问题是,在POSIX时区名称中,正偏移用于格林威治以西的位置.在其他地方,PostgreSQL遵循ISO-8601惯例,正面时区偏移位于格林威治以东.

注意西与东的差异.