为什么to_timestamp
在同一个查询中使用不同的时区来显示纪元?注意+02
与+01
。
=> select to_timestamp(1651157248),to_timestamp(1647224832);
to_timestamp | to_timestamp
------------------------+------------------------
2022-04-28 16:47:28+02 | 2022-03-14 03:27:12+01
(1 row)
=> select version();
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit
(1 row)
=> show timezone;
TimeZone
---------------
Europe/Vienna
(1 row)
可能与 3 月底从冬至夏时的转换有关,+01
对应CET
和。+02
CEST
我如何使用to_timestamp
它以使其始终使用相同的时间偏移量(无论是哪一个)?
奥地利有夏令时,因此 PostgreSQL 将在冬季显示时间戳,其 UTC 偏移量与春季时间戳不同。
to_timestamp
将 UTC 纪元转换为 (时区无关!)timestamp with time zone
。仅当timestamp with timezone
呈现为字符串时,才会根据 的当前设置来完成timezone
。您的所有时间戳都显示在同一时区:
Europe/Vienna
. 该时区在一年中的不同时间与 UTC 有不同的偏移量。如果您希望以相同的 UTC 偏移量显示所有时间戳,请选择timezone
没有夏令时的设置,例如UTC
或+02
。to_timestamp
根据当前设置的时区显示一个纪元,并带有适当的偏移量。如果时区恰好有夏令时 (DST),则选择的偏移量取决于时代是否落入 DST 的范围内。对于以下示例,请注意在 上2022-03-27 02:00:00+01
,时区CET
从标准时间切换到 DST。要获得相同的偏移量,请将时区设置为不带 DST 的时区:
或每次显示纪元时明确指定时区: