Вопрос по postgresql, timezone, migration – Перенос даты и времени w. часовой пояс в часовом поясе от PostgreSQL до UTC, чтобы использовать Django 1.4

15

Нужно ли мне конвертировать все существующие даты и время в Postgres из их текущего часового пояса в UTC, или Django 1.4 распознает часовой пояс при чтении чего-то, что не является UTC (но затем сохранено как UTC)

У меня есть прекрасно работающий веб-сайт Django 1.3 / Postgres, где я работаю с несколькими часовыми поясами. Я храню всю дату и время w. информация о часовом поясе, но в Postgres это установлено в американский / восточный часовой пояс (да, я знаю, это должен был быть UTC).

Теперь я планирую перейти на Django 1.4 и планирую использовать поддержку часового пояса Django. Из того, что я понимаю, это сохранит все время и дату в UTC в базе данных, и это нормально, но как насчет всей моей существующей информации, где установлен часовой пояс, но не UTC.

Кто-нибудь мигрировал в соответствии с этим и как это работает, такое ощущение, что либо у меня вообще нет проблем, либо мне нужно перенести много-много данных о времени и времени.

Ваш Ответ

1   ответ
18

to US/Eastern timezone (yes, I know should have been UTC) in Postgres.

Здесь есть несколько заблуждений.

Тип данных называетсяtimestamp в PostgreSQL. Не существует типа с именем «datetime».
timestamp коротка дляtimestamp without time zone.
timestamptz коротка дляtimestamp with time zone.

Как руководство сообщает:

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

Подобно времени Posix, которое начинается 30 лет назад вЭпоха Unix 1970-01-01 00:00 UTC. Заtimestamp,local 2000-01-01 00:00 предполагается. Заtimestamptz ссылка2000-01-01 00:00 UTC и значения корректируются для смещения часового пояса на входе и выходе.

timestamp with time zone это просто еще один способ ввода и представления уникального момента времени. Вы не можете & quot; установить & quot; временная метка (с часовым поясом или без него) для любого другого часового пояса, кроме UTC. Смещение часового пояса само по себеnot сохраняется на всех. Он используется только для настройки значения на UTC.

representation значения метки времени будет учитывать текущую настройку часового пояса

to display the value accordingly (output) to interpret a timestamp without time zone (input).

good newsВаша миграция должна работать сразу после установки - если вы ее не испортили.

Я написалdetailed explanation о том, как временные метки Postgres работают с примерами и ссылками вthis related answer.

Example queries

Попробуйте следующие утверждения (один блок за раз). И попробуйте с вашей колонкой тоже:

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;
Error: User Rate Limit Exceeded Jens Lundstrom
Error: User Rate Limit Exceeded Jens Lundstrom
Error: User Rate Limit ExceededUSE_TZ = TrueError: User Rate Limit Exceeded
Error: User Rate Limit ExceededsavedError: User Rate Limit ExceededdisplayError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Jens Lundstrom

Похожие вопросы