SELECT date_part('timezone_hour', '2019-12-01 13:37:12 PST'::timestamptz) AS "tz"和
SELECT date_part('timezone_hour', '2019-12-01 13:37:12 EST'::timestamptz) AS "tz"这两个函数都返回-8,即我的本地太平洋时间GTM偏移量(以小时为单位),而不是函数参数中的时区。
extract也会发生同样的行为:
SELECT extract('timezone_hour' from '2019-12-01 13:37:12 PST'::timestamptz) AS "year"和
SELECT extract('timezone_hour' from '2019-12-01 13:37:12 PST'::timestamptz) AS "year"两者都返回-8。
为什么我不能获得我为时间戳指定的时区偏移量?
发布于 2018-09-21 08:11:19
试试这些:
SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'PST') AS "tz";
SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'EST') AS "tz";
SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'AEST') AS "tz";在rextester (postgres)中,它们分别返回22、19和4
在您现有的方法中,如果您拉出"timezone_hour“,它将是您输入的值(因为这是该时区中的小时)。
发布于 2018-09-24 19:25:44
如果看一下PostgreSQL是如何显示这两个时间戳的,您会更好地理解:
SELECT TIMESTAMP WITH TIME ZONE '2019-12-01 13:37:12 PST';
timestamptz
------------------------
2019-12-01 22:37:12+01
(1 row)
SELECT TIMESTAMP WITH TIME ZONE '2019-12-01 13:37:12 EST';
timestamptz
------------------------
2019-12-01 19:37:12+01
(1 row)在这两种情况下,时间戳都转换为timezone配置参数指定的会话时区。
PostgreSQL不在timestamp with time zone中存储时区信息,它将时间戳转换为协调世界时并以这种方式存储。显示时,时间戳将转换为当前会话时区。
因此,在PostgreSQL中,最好将timestamp with time zone称为“绝对时间戳”。它准确地表示某个时间点,但不包含时区信息。
换句话说,如果提取timezone_hour,将始终得到相同的结果:当前会话时区的时区偏移。
https://stackoverflow.com/questions/52434783
复制相似问题