【问题标题】:Timezone shifting in postgres importpostgres 导入中的时区转换
【发布时间】:2025-12-26 08:15:11
【问题描述】:

我正在使用 ODBC 导出功能将数据从 Access 表导入 postgres 表。 Postgres 正在将新的时间戳创建为 timestampz,并且似乎将我的日期(以 UTC 开头)强制转换为 UTC,从而将所有时间转移了大约 4 小时。 示例 == 此记录作为 2017/05/20 00:00:00 进入并被翻译为: 2017-05-19 20:00:00

【问题讨论】:

  • 如果将它们与时区一起放入,那么它将使用数据库服务器所在位置的时区,因此如果您的日期实际上是 UTC,而不是您的 postgres 实例的时区,那么您需要修改它当您输入数据时。或者您可以简单地将 postgres 表的数据类型更改为没有时区的数据类型,并始终使用 UTC 作为该数据。

标签: postgresql datetime


【解决方案1】:

带有时区的 postgres 时间戳确实强制日期以 UTC 格式存储。所以如果你有时间在 UTC - 你很好。您观察到的 4 小时班次未存储在 db 中 - 这是由于您的客户时区。 Postgres 根据您所在的区域显示(以 UTC 格式存储)时间。例如:

t=# select '2017/05/20 00:00:00'::timestamptz at time zone 'utc';
      timezone
---------------------
 2017-05-19 20:00:00
(1 row)

Time: 0.368 ms
t=# set timezone TO 'utc';
SET
Time: 9.633 ms
t=# select '2017/05/20 00:00:00'::timestamptz at time zone 'utc';
      timezone
---------------------
 2017-05-20 00:00:00
(1 row)

Time: 0.353 ms

【讨论】: