不了解PostgreSQL的时区行为

时间:2016-09-13 08:28:29

标签: postgresql timezone

我当地的时区是PRC(中国),UTC + 8,但

select (timestamp '2016-09-01 00:00:00' at time zone 'PRC') 
        -  (timestamp '2016-09-01 00:00:00' at time zone 'UTC');

返回-08:00:00。不应该是+08:00:00吗?

我的PostgreSQL版本是9.5。

1 个答案:

答案 0 :(得分:6)

不,它正在做正确的事情 - 但是当你向它提供表达式而没有时区作为左侧时,你必须理解at time zone的意思。它基本上将其解释为指定时区的时间戳

所以'2016-09-01 00:00:00' at time zone 'PRC'表示“9月1日午夜在中国的时间” - 即2016-08-31T16:00:00Z。

并且'2016-09-01 00:00:00' at time zone 'UTC'表示“9月1日午夜时间的UTC时刻” - 即2016-09-01T00:00:00Z。

所以你要2016-08-31T16:00:00Z - 2016-09-01T00:00:00Z,这确实是-8小时。