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。
我很感激我的 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。