Postgres SQL时区转换

时间:2017-07-13 21:36:19

标签: sql postgresql timezone-offset timestamp-with-timezone

我很欣赏Postgres语法中的第二双眼睛。

数据库将时间戳存储在UTC中。我正在尝试从UTC转换为东部夏令时EDT,但输出不准确。

这是我的语法:

SELECT
to_char(((timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EDT'), 'MM/DD/YYYY HH24:MI')
FROM table_name

记录TimeStamp:

09/10/2016 12:00

查询输出:

09/10/2016 16:00

期望的输出:

09/10/2016 08:00

感谢您的协助。

1 个答案:

答案 0 :(得分:4)

AT TIMEZONE两次是多余的,因为它只会从当前时区(建议你是UTC)转换为UTC然后转换为EDT。

您认为需要将其转换为UTC的事实告诉我您不将其存储为TIMESTAMP WITH TIMEZONE。检查是否是这种情况。如果是,那可能是你的问题。 From the docs

  

如果输入字符串中没有声明时区,则假定它位于系统时区参数指示的时区内,并使用时区的偏移量转换为UTC。

基本上,如果您没有指定,它会假定它默认来自您当前的时区,而不是UTC。您可以输入UTC时间戳,并假设它是EDT。