Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли поставить разные таймзоны в типе datetime with timezone postgresql? / 18 сообщений из 18, страница 1 из 1
21.11.2017, 00:57
    #39556474
mister_psql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Хранить в базе дату время записывая таймзону в котором дата время находится.
К примеру: 21.11.2017 11:00 UTC+3, 21.11.2017 16:00 UTC+6
Можно ли в PSQL хранить это один полем? 2014-11-10 03:13:14 UTC+5?
Я создал уже таблицу в которую инсертил такие данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE tz (
  "timestamp" timestamp with time zone
 );

INSERT INTO tz ("timestamp") VALUES 
('2014-10-10 12:13:14 UTC+3'), 
('2014-10-10 12:13:14 UTC+4'), 
('2014-10-10 12:13:14 UTC+5');



Вот что выводит:
Код: plsql
1.
2.
3.
4.
5.
6.
zonetest=# select * from tz;   
       timestamp               
------------------------       
 2014-10-10 15:13:14+00
 2014-10-10 16:13:14+00
 2014-10-10 17:13:14+00


То что он так записывает в базу данных является нормальных явлением?
Если да, то каким образом сохранять таймзону которая приходит? Создать отдельное поле с таймзоной?
...
Рейтинг: 0 / 0
21.11.2017, 01:18
    #39556478
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
mister_psqlХранить в базе дату время записывая таймзону в котором дата время находится.
К примеру: 21.11.2017 11:00 UTC+3, 21.11.2017 16:00 UTC+6
Можно ли в PSQL хранить это один полем? 2014-11-10 03:13:14 UTC+5?
Я создал уже таблицу в которую инсертил такие данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE tz (
  "timestamp" timestamp with time zone
 );

INSERT INTO tz ("timestamp") VALUES 
('2014-10-10 12:13:14 UTC+3'), 
('2014-10-10 12:13:14 UTC+4'), 
('2014-10-10 12:13:14 UTC+5');



Вот что выводит:
Код: plsql
1.
2.
3.
4.
5.
6.
zonetest=# select * from tz;   
       timestamp               
------------------------       
 2014-10-10 15:13:14+00
 2014-10-10 16:13:14+00
 2014-10-10 17:13:14+00


То что он так записывает в базу данных является нормальных явлением?
Если да, то каким образом сохранять таймзону которая приходит? Создать отдельное поле с таймзоной?

Да, но зачем вам timezone то вообще нужна как независимая информация? Какую задачу вы этим пытаетесь решать?
...
Рейтинг: 0 / 0
21.11.2017, 01:26
    #39556481
mister_psql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Maxim Bogukmister_psqlХранить в базе дату время записывая таймзону в котором дата время находится.
К примеру: 21.11.2017 11:00 UTC+3, 21.11.2017 16:00 UTC+6
Можно ли в PSQL хранить это один полем? 2014-11-10 03:13:14 UTC+5?
Я создал уже таблицу в которую инсертил такие данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE tz (
  "timestamp" timestamp with time zone
 );

INSERT INTO tz ("timestamp") VALUES 
('2014-10-10 12:13:14 UTC+3'), 
('2014-10-10 12:13:14 UTC+4'), 
('2014-10-10 12:13:14 UTC+5');



Вот что выводит:
Код: plsql
1.
2.
3.
4.
5.
6.
zonetest=# select * from tz;   
       timestamp               
------------------------       
 2014-10-10 15:13:14+00
 2014-10-10 16:13:14+00
 2014-10-10 17:13:14+00


То что он так записывает в базу данных является нормальных явлением?
Если да, то каким образом сохранять таймзону которая приходит? Создать отдельное поле с таймзоной?

Да, но зачем вам timezone то вообще нужна как независимая информация? Какую задачу вы этим пытаетесь решать?

У нас в проекте есть мероприятия, время и дату которого нужно сохранять учитывая часовой пояс места проведения мероприятия.
А для людей которые живут в других уголках нашей страны, нужно выводить время учитывая их таймзону.
Т.е если мероприятие проходит в Красноярске, то мне нужно запомнить в базе его время и таймзону места проведения, а для человека, проживающего в Москве показать время проведения по Москве и время по Красноярску
...
Рейтинг: 0 / 0
21.11.2017, 01:32
    #39556483
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
mister_psqlMaxim Bogukпропущено...


Да, но зачем вам timezone то вообще нужна как независимая информация? Какую задачу вы этим пытаетесь решать?

У нас в проекте есть мероприятия, время и дату которого нужно сохранять учитывая часовой пояс места проведения мероприятия.
А для людей которые живут в других уголках нашей страны, нужно выводить время учитывая их таймзону.
Т.е если мероприятие проходит в Красноярске, то мне нужно запомнить в базе его время и таймзону места проведения, а для человека, проживающего в Москве показать время проведения по Москве и время по Красноярску

Да тогда надо отдельно сохранять еще и локальную timezone. Валидный пример.
...
Рейтинг: 0 / 0
21.11.2017, 01:59
    #39556488
mister_psql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Maxim Boguk,
Спасибо!)
...
Рейтинг: 0 / 0
21.11.2017, 09:54
    #39556593
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
mister_psql,
Код: sql
1.
2.
3.
4.
SELECT 
  now() AT TIME ZONE 'Europe/Moscow' AS moscow,
  now() AT TIME ZONE 'Europe/Berlin' AS berlin,
  now() AT TIME ZONE 'Europe/London' AS london;



если меняется установки подключения клиента, то можно делать
Код: sql
1.
2.
SET TIMEZONE TO 'Europe/Oslo';
SELECT now();



в общем, не надо хранить зону отдельно. надо хранить время с зоной.
...
Рейтинг: 0 / 0
21.11.2017, 10:52
    #39556617
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Lonepsycho,

Увы, иногда надо хранить зону (для событий в будущем) или даже просто координаты точки (на случай если правительство решит изменить деление на зоны или правила перехода на летнее время).
Но все такие случаи надо рассматривать индивидуально, это не является общим правилом .

Хорошая статья на тему: https://habrahabr.ru/company/mailru/blog/242645/
Рекомендация “хранить в UTC” == использовать `timestamptz` в PostgreSQL.
...
Рейтинг: 0 / 0
21.11.2017, 11:15
    #39556627
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
vyegorov,

странно, работаем с клиентами в разных часовых поясах. ещё не напоролись. храним в timestamptz. ушёл читать...
...
Рейтинг: 0 / 0
21.11.2017, 13:43
    #39556805
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Lonepsychomister_psql,
Код: sql
1.
2.
3.
4.
SELECT 
  now() AT TIME ZONE 'Europe/Moscow' AS moscow,
  now() AT TIME ZONE 'Europe/Berlin' AS berlin,
  now() AT TIME ZONE 'Europe/London' AS london;



если меняется установки подключения клиента, то можно делать
Код: sql
1.
2.
SET TIMEZONE TO 'Europe/Oslo';
SELECT now();



в общем, не надо хранить зону отдельно. надо хранить время с зоной.

И как вы решите тогда задачу
"
Т.е если мероприятие проходит в Красноярске, то мне нужно запомнить в базе его время и таймзону места проведения, а для человека, проживающего в Москве показать время проведения по Москве и время по Красноярску
"
?
...
Рейтинг: 0 / 0
21.11.2017, 13:45
    #39556810
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
mister_psqlMaxim Boguk,
Спасибо!)

Кстати да очень правильное замечание было на счет того что надо не +3 хранить а 'Europe/Moscow' иначе в местах где есть летнее и зимнее время - получите неожиданные результаты для отображения локального времени события.

;)
...
Рейтинг: 0 / 0
21.11.2017, 14:00
    #39556834
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Maxim BogukИ как вы решите тогда задачу
"
Т.е если мероприятие проходит в Красноярске, то мне нужно запомнить в базе его время и таймзону места проведения, а для человека, проживающего в Москве показать время проведения по Москве и время по Красноярску
"
?

походу никак. пока-что такого варианта у нас нету. юзер видит время в его тайм зоне, поскольку он не мобильный, проблем не возникало. а так, да, если надо показывать время евента и по времени юзера и по времени евента, придётся хранить зону евента.
...
Рейтинг: 0 / 0
21.11.2017, 23:08
    #39557211
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
В свое время интересовало для Java.... ничего лучше не придумал, чем отправить в топку даты в базе и хранить в виде текстовой строки

p.s. нужно было хранить время вылета/прилета с учетом таймзоны аэропорта. Хотя информацию о таймзоне можно было на аэропорт повесить, решил, что лучше/правильнее всегда информацию о таймзоне с датой таскать. Поскольку поиска по информации в БД не было (поиск только в среднем слое), то текст строка меня полностью устроила
...
Рейтинг: 0 / 0
30.11.2017, 10:25
    #39561784
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
даты хранить надо в UTC
а отображать в таймзоне юзера
...
Рейтинг: 0 / 0
30.11.2017, 12:42
    #39561887
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
bochkovдаты хранить надо в UTC
а отображать в таймзоне юзера

еще один не прочитал тред и вопрос... :(
...
Рейтинг: 0 / 0
30.11.2017, 13:21
    #39561910
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Maxim Bogukbochkovдаты хранить надо в UTC
а отображать в таймзоне юзера

еще один не прочитал тред и вопрос... :(
кхм. спорное утверждение.

вопрос ТС совершенно безграмотный.

ваше сюсюканье с тс совершенно антипродуктивно с т.з. рассеяния непонимания ТС-а способа хранения пыжом таймстампа "визтаймзон"

достаточно заострить внимание на том, что никаких "таймстапвизтаймзон" пж не хранит. ибо не умеет.
он умеет хранить таймстампы. и только. (в обоих случаях -- и с тайм,якобы,зоной и без якобы нее).

причем в одном случае он считает, что данное лежит в УТС, и предоставляет "интерфейсные услуги" -- форматируя строку отдачи данного в таймзону клиента (сеанса).

таким образом, если нам нужна таймзона клиента в данных -- нам надо ее хранить отдельно (т.к. внутри таймстампа она не хранится). в частности можно хранить географическую привязку, саму таймзону в строковом поле, и т.п..
...
Рейтинг: 0 / 0
30.11.2017, 13:45
    #39561919
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
qwwq,

Тут вопрос в том, почему Postgres так себя ведёт. И тут уже надо лезть в стандарт SQL и искать причины там…
...
Рейтинг: 0 / 0
30.11.2017, 13:52
    #39561924
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
vyegorovqwwq,

Тут вопрос в том, почему Postgres так себя ведёт. И тут уже надо лезть в стандарт SQL и искать причины там…
думаю тут нет вопроса о поведении.
оно видимо вполне законное.
вопрос о неудачных названиях типов -- видимо упирается в стандарты.

мне как--то требовалось иметь systime в типе timestamp , так как-то было не очевидно, откуда брать зону сервера в сеансе, потенциально клиентском.
...
Рейтинг: 0 / 0
30.11.2017, 13:58
    #39561929
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли поставить разные таймзоны в типе datetime with timezone postgresql?
Maxim Bogukbochkovдаты хранить надо в UTC
а отображать в таймзоне юзера

еще один не прочитал тред и вопрос... :(
ну и таймзону события отдельно
хранить
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно ли поставить разные таймзоны в типе datetime with timezone postgresql? / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]