迁移datetime w.时区在PostgreSQL到UTC时区使用Django 1.4

前端之家收集整理的这篇文章主要介绍了迁移datetime w.时区在PostgreSQL到UTC时区使用Django 1.4前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将Postgres中的所有现有日期时间从当前时区转换为UTC,否则Django 1.4时区在读取不是UTC的东西时可以理解(但是另存为UTC).

我有一个完美的和工作的Django 1.3 / Postgres网站,我处理多个时区.我正在存储所有的datetime w.时区信息,但这恰好设置为美国/东部时区(是的,我知道应该是UTC)在Postgres.

现在,我计划升级到Django 1.4,并计划在那里使用Django时区支持.从我的理解,它将保存UTC中的所有datetime到数据库,这很好,但是我所有现有的信息时区设置,但不是UTC.

有没有人根据这个迁移,它是如何工作的,感觉就像我没有任何问题,或者我需要迁移大量的datetime数据.

I am storing all datetime w. timezone info but this happens to be set
to US/Eastern timezone (yes,I know should have been UTC) in Postgres.

这里有几个误解.

数据类型在Postgresql中称为时间戳.没有名为“datetime”的类型.
时间戳是timestamp without time zone的缩写.
时间戳是timestamp with time zone的缩写.

手册通知

timestamp values are stored as seconds before or after midnight 2000-01-01.

类似于Posix时间,从Unix epoch 1970-01-01 00:00 UTC开始的30年前.对于时间戳,假定本地2000-01-01 00:00.对于timestamptz,参考号为2000-01-01 00:00 UTC,并根据输入和输出对时区偏移量进行调整.

带有时区的时间戳只是另一种输入和表示唯一时间点的方式.您不能将时间戳(带或不带时区)“设置为任何其他时区(UTC).时区偏移本身根本不保存.它只用于将值调整为UTC.

时间戳值的表示将考虑当前时区设置

>相应地显示值(输出)
>来解释没有时区(输入)的时间戳.

好消息:您的移民工作应该刚刚开箱即用,只要您不要积极地搞砸.

我已经详细说明了Postgres时间戳如何在this related answer中使用示例和链接.

示例查询

尝试以下语句(一次一个块).也可以用你的专栏:

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;

猜你在找的Postgre SQL相关文章