不了解PostgreSQL的时区行为

Rob*_*ert 2 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');
Run Code Online (Sandbox Code Playgroud)

回报-08:00:00.不应该+08:00:00吗?

我的PostgreSQL版本是9.5.

Jon*_*eet 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'意味着"在UTC时间9月1日午夜的时刻" - 即2016-09-01T00:00:00Z.

所以你要求2016-08-31T16:00:00Z - 2016-09-01T00:00:00Z的确是-8小时.