将 PostgreSQL 中的日期时间和时区迁移到 UTC 时区以使用 Django 1.4



我是否需要将Postgres中的所有现有日期时间从当前时区转换为UTC,或者Django 1.4时区在读取非UTC内容时会理解吗(但随后另存为UTC(。

我有一个非常好且工作正常的 Django 1.3/Postgres 网站,我可以在其中处理多个时区。我正在存储所有日期时间和时区信息,但这恰好在 Postgres 中设置为美国/东部时区(是的,我知道应该是 UTC(。

现在,我计划升级到 Django 1.4,并计划在那里使用 Django 时区支持。据我了解,它会将 UTC 中的所有日期时间保存到数据库中,这很好,但是我所有现有信息都设置了时区但不设置为 UTC。

有没有人根据这个迁移以及它是如何工作的,感觉要么我完全没有问题,要么我需要迁移大量的日期时间数据。

我正在存储所有日期时间和时区信息,但这恰好是设置的到美国/东部时区(是的,我知道应该是UTC(在Postgres。

这里有一些误解。

数据类型在PostgreSQL中称为timestamp。没有称为"datetime"的类型.
timestamptimestamp without time zone .
的缩写 timestamptztimestamp with time zone的缩写。

正如手册所告知的:

timestamp值存储为午夜 2000-01-01 之前或之后的秒。

类似于 Posix 时间,它始于 30 年前的 Unix 时代 1970-01-01 00:00 UTC。对于timestamp,假定为本地2000-01-01 00:00。对于timestamptz2000-01-01 00:00 UTC参考,并根据当前会话在输入和输出上的时区偏移调整显示。

timestamp with time zone存储一个唯一的时间点。您不能在内部将时间戳(带或不带时区("设置"为 UTC 以外的任何其他时区。时区偏移量本身根本不保存。它仅用于将输入/输出调整为UTC。

时间戳值的表示形式考虑了当前会话的时区设置。

  • 以相应地显示值(输出(。
  • 正确解释timestamp without time zone(输入(。

好消息:您的迁移应该开箱即用 - 只要您不主动搞砸它。

有关

Postgres如何通过示例和链接进行时间戳的详细说明:

  • 在 Rails 和 PostgreSQL 中完全忽略时区

示例查询

请尝试以下语句(一次一个块(。也可以尝试使用您的专栏:

SHOW timezone;
SELECT '2011-05-24 11:17:11.533479-05'::timestamptz(0);
SELECT '2011-05-24 11:17:11-05'::timestamptz;
SET timezone='UTC';
SELECT '2011-05-24 11:17-05'::timestamptz;
SELECT '2011-05-24 11:17-05'::timestamptz AT TIME ZONE 'UTC';
SELECT '2011-05-24 11:17-05'::timestamptz AT TIME ZONE 'UTC' AT TIME ZONE 'UTC';
RESET timezone;

相关内容

  • 没有找到相关文章

最新更新