У меня есть таблица PostgreSQL со следующей схемой -
CREATE TABLE test (
id serial NOT NULL PRIMARY KEY,
username varchar(100) NOT NULL, -- The user name
dob timestamp with time zone NOT NULL -- The date of birth
);
Затем я вставил некоторые данные в таблицу с такими данными -
INSERT INTO "test" ("username", "dob") VALUES (E'Scotty', E'2009-05-14 15:44:43');
И если я проверю данные в БД, я получу это -
mydb=> select username, dob from test where username='Scotty';
username | dob
----------+---------------------------
Scotty | 2009-05-14 15:44:43+05:30
(1 row)
Все в порядке, пока я не попытаюсь вставить некоторые данные с датой до 1946 года -
INSERT INTO "test" ("username", "dob") VALUES (E'James T Kirk', E'1945-01-01 11:30:11');
mydb=> select username, dob from test where username='James T Kirk';
username | dob
-------------- +---------------------------
James T Kirk | 1945-01-01 11:30:11+06:30
(1 row)
Посмотрите на приведенный выше результат. Обратите внимание, как значение часового пояса изменилось с +05: 30 до +06: 30
На самом деле становится хуже, когда я вставляю любую дату, предшествующую 1942 г. -
INSERT INTO "test" ("username", "dob") VALUES (E'Spock', E'1941-01-01 11:30:11');
mydb=> select username, dob from test where username='Spock';
username | dob
----------+------------------------------
Spock | 1941-01-01 11:30:11+05:53:20
(1 row)
Теперь значение часового пояса полностью искажено, и дата не может быть проанализирована.
Буду признателен за любую помощь в этом.
Мой часовой пояс - Азия / Калькутта (GMT + 05: 30).
Обновление : я попытался ввести данные, указав TZ явно следующим образом -
INSERT INTO "test" ("username", "dob") VALUES (E'McCoy', E'1941-01-25 00:20:30+05:30');
Даже тогда это не сработало.
mydb=> select username, dob from test where username='McCoy';
username | dob
----------+------------------------------
McCoy | 1941-01-25 00:43:50+05:53:20
(1 row)