为什么Postgres会使用“AT TIME ZONE”

时间:2015-08-12 10:37:49

标签: postgresql datetime timezone converter

我有一个带有TIMESTAMP WITH TIME ZONE值的postgres数据库。值可以具有任意时区。我现在想要在特定时区使用date_trunc函数。我虽然可以使用AT TIME ZONE函数将所有时间戳标准化为一个时区,但结果我得到一个没有时区信息的TIMESTAMP。 e.g:

select now(), now() AT TIME ZONE 'Europe/London';
              now              |          timezone          
-------------------------------+----------------------------
 2015-08-12 12:21:55.337973+02 | 2015-08-12 11:21:55.337973

我想要的是获得附加时区信息的结果,例如2015-08-12 11:21:55.337973+01,但我似乎无法为此找到命令。

我目前的解决方案是再次使用AT TIME ZONE``, then using date_trunc on the TIMESTAMP without timezone and AT TIME ZONE```来重新附加时区信息。但是,以这种方式使用它似乎很难看:

SELECT
date_trunc('day', '2015-08-01 00:00:00+02'::timestamptz),
date_trunc('day', '2015-08-01 00:00:00+02'::timestamptz AT TIME ZONE 'Europe/London')
AT TIME ZONE 'Europe/London';

       date_trunc       |        timezone        
------------------------+------------------------
 2015-08-01 00:00:00+02 | 2015-07-31 01:00:00+02

我的问题是:

  1. 是否有postgresql命令将时间戳从一个时区转换为另一个时区而不丢弃时区信息
  2. 为什么postgres会这样做?是否有理由放弃时区信息?
  3. 感谢您的帮助。

0 个答案:

没有答案