Postgres UTC日期格式&时代演员,签名反转

时间:2011-12-06 11:25:39

标签: postgresql timezone

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

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

1 个答案:

答案 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惯例,即正时区偏移位于格林威治以东。

注意西方与东方之间的区别。