我正在做一些数据导入,包括时区转换。我导入的数据位于 America/New_York 时区,我必须将其导入为 UTC 时间戳。
我尝试了一些在互联网上找到的例子,例如:
to_timestamp(tar.read_at_date || ' ' || tar.read_at_hour, 'MM/DD/YYYY HH24:MI')::timestamp without time zone at time zone 'America/New_York' at time zone 'utc'
这似乎对大多数数据都有效,但是,我注意到在特定时间有一些奇怪的转换,比如 Postgres 对 UTC 时区应用夏令时(???)。
要快速说明行为,请查看下面的示例和结果:
select ('2023-03-25 22:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
select ('2023-03-25 23:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
我正在运行这些查询:
PostgreSQL [15.5
PostgreSQL 15.5 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6), 64-bit]
另外,值得一提的是,2023 年纽约的夏令时从 3 月 12 日星期日凌晨 2:00 开始。有趣的是,2023 年 3 月 26 日凌晨 2 点是欧洲时钟前进的时间。
有什么合理的解释为什么会发生这种情况吗?