在 Postgresql 中,如何使用"At Time Zone"取消反转时区偏移量



我试图把我的头围绕Postgresql时区,我似乎不能弄清楚。EST是美国的"东部标准时间",通常是UTC-5。

例1:Base Test
select '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) 

相关内容

  • 没有找到相关文章

最新更新