加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:28:24 所属栏目:百科 来源:网络整理
导读:我需要将Postgres中的所有现有日期时间从当前时区转换为UTC,否则Django 1.4时区在读取不是UTC的东西时可以理解(但是另存为UTC). 我有一个完美的和工作的Django 1.3 / Postgres网站,我处理多个时区.我正在存储所有的datetime w.时区信息,但这恰好设置为美国/
我需要将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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读