我很欣赏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
感谢您的协助。
答案 0 :(得分:4)
说AT TIMEZONE
两次是多余的,因为它只会从当前时区(建议你是UTC)转换为UTC然后转换为EDT。
您认为需要将其转换为UTC的事实告诉我您不将其存储为TIMESTAMP WITH TIMEZONE
。检查是否是这种情况。如果是,那可能是你的问题。 From the docs:
如果输入字符串中没有声明时区,则假定它位于系统时区参数指示的时区内,并使用时区的偏移量转换为UTC。
基本上,如果您没有指定,它会假定它默认来自您当前的时区,而不是UTC。您可以输入UTC时间戳,并假设它是EDT。