Postgres SQL 时区转换

emm*_*edu 0 sql postgresql timezone-offset timestamp-with-timezone

我可以欣赏我的 Postgres 语法的第二双眼睛。

数据库将时间戳存储在UTC. 我正在尝试将 from 转换UTC为 Eastern Daylight Time EDT,但输出不准确。

这是我的语法:

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

记录时间戳:

09/10/2016 12:00
Run Code Online (Sandbox Code Playgroud)

查询输出:

09/10/2016 16:00
Run Code Online (Sandbox Code Playgroud)

期望输出:

09/10/2016 08:00
Run Code Online (Sandbox Code Playgroud)

谢谢你的协助。

Tho*_*mas 5

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

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

如果输入字符串中未指定时区,则假定其位于系统时区参数指示的时区中,并使用时区区域的偏移量转换为 UTC。

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