我试图把我的头围绕Postgresql时区,我似乎不能弄清楚。EST是美国的"东部标准时间",通常是UTC-5。
例1:Base Testselect '08/31/2011 12:00 pm EST'::timestamptz at time zone 'EST';
timezone
---------------------
2011-08-31 12:00:00
示例2:偏移量为+5
select '08/31/2011 12:00 pm EST' at time zone '+5';
timezone
---------------------
2011-08-31 12:00:00
示例3:偏移量为-5
select '08/31/2011 12:00 pm EST' at time zone '-5';
timezone
---------------------
2011-08-31 22:00:00
显然,一切都是倒退的。EST又是……应该是UTC-5。现在,我确实搜索了文档,它确实解释了东西是"POSIX",这是向后的。(正偏移量在GMT以西,负偏移量在GMT以东)。
然而,我如何绕过这个?在应用层,我总是可以把+号反转成-号,但这对我来说似乎有点混乱。这就是我的终极问题。
在数据库层(Postgres),是否有一种方法来使用"在时区"语法,使GMT-5对应于EST?或者我只需要反转应用层的所有东西?
使用文档中所写的间隔数据类型来获得正确的行为:
在这些表达式中,可以指定所需的时区
zone
作为文本字符串(例如,'PST')或作为间隔(例如,间隔喂饲)。
基础测试:
SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE 'EST';
timezone
---------------------
2011-08-31 12:00:00
(1 row)
时区信息:
SELECT * FROM pg_timezone_abbrevs WHERE abbrev LIKE 'EST';
abbrev | utc_offset | is_dst
--------+------------+--------
EST | -05:00:00 | f
(1 row)
正确偏移量-5:
SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '-05:00'::interval;
timezone
---------------------
2011-08-31 12:00:00
(1 row)
正确偏移量+5:
SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '+05:00'::interval;
timezone
---------------------
2011-08-31 22:00:00
(1 row)