Postgres SQL 时区转换

Postgres SQL Timezone conversion

我很感激我的 Postgres 语法有第二双眼睛。

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

这是我的语法:

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

记录时间戳:

09/10/2016 12:00

查询输出:

09/10/2016 16:00

期望的输出:

09/10/2016 08:00

感谢您的帮助。

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

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

If no time zone is stated in the input string, then it is assumed to be in the time zone indicated by the system's timezone parameter, and is converted to UTC using the offset for the timezone zone.

基本上,如果您不指定,默认情况下它假定它来自您当前的时区,而不是 UTC。有可能您输入了 UTC 时间戳,它假定它是 EDT。