Russian Qt Forum

Qt => Базы данных => Тема начата: Примерный ученик от Июнь 07, 2020, 09:40



Название: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 07, 2020, 09:40
Есть две базы. Данные из одной сервер через клиент посылает на другую. Время передается в виде qint64 и устанавливается через
Код:
dt.setMSecsSinceEpoch(time)
И в первой и во второй базе время timestamppz (c привязкой к зоне Москва).
В базах время правильное. Но вот в переменной dt  на 1 час меньше.
PostgreSQL 8.1


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Пантер от Июнь 07, 2020, 12:18
Не совсем понял проблему. Ты берешь из одной БД поле, помещаешь его в QDateTime и засовываешь в другую БД этот QDateTime? Можешь немного подробнее расписать? Проблема с таймзонами это довольно частая проблема при проектировании.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 07, 2020, 12:48
Надо проверять, есть ли такая запись с таким же временем. А как проверять, если время пришедшей записи, приведенное к QDateTime  на данном компьютере отличается от времени, которое в базе на 1 час. Как будет на других компьютерам с другими временными зонами не проверял


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 07, 2020, 12:55
В запросе к базе время в формате Qt::ISODate в текстовом виде отличается от реального времени, которое показывает PGAdmin на 1 час


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Пантер от Июнь 07, 2020, 13:02
Все равно нифига не понял. :) Откуда приходит запись?
Вообще, если ты можешь изменить структуру БД, я преложил бы тебе хранить в ней unixtime в UTC. То есть, int32 поле, куда ты будешь вносить dt.toUtc().toSecsSinceEpoch()


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 07, 2020, 16:09
Я так и сделал. Храню в время в милисекундах, все нормально заработало, так как и сервера и клиенты настроены на Москву.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 07, 2020, 16:11
Только поле int8, так как точность до милисекунд нужна


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: ssoft от Июнь 08, 2020, 07:29
Я так и сделал. Храню в время в милисекундах, все нормально заработало, так как и сервера и клиенты настроены на Москву.

А почему бы не использовать UTC? Тогда и с локальным временем и настройкой на Москву проблем не будет.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 10, 2020, 15:27
Требование заказчика: серверы и клиенты имеют часовой пояс Москвы


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Пантер от Июнь 10, 2020, 16:00
Это понятно. Ты держи в базе UTC. а для вывода конвертируй и не будет тебе проблем.. А твой час это скорее всего летнее или зимнее время где-то. Не все компы имеют обновления с последней информацией о часовых поясах.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 10, 2020, 18:26
Это понятно. Ты держи в базе UTC. а для вывода конвертируй и не будет тебе проблем.. А твой час это скорее всего летнее или зимнее время где-то. Не все компы имеют обновления с последней информацией о часовых поясах.

Это имело бы смысл, если бы в системе не все были в одном часовом поясе.
И да, проблема в машине с Виндой, которая почему то упорно считала, что в России сейчас летнее время. Подправили


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: ssoft от Июнь 11, 2020, 14:43
Это имело бы смысл, если бы в системе не все были в одном часовом поясе.
И да, проблема в машине с Виндой, которая почему то упорно считала, что в России сейчас летнее время. Подправили

И все-таки стоит прислушаться к опыту других). Храните все в UTC и будет счастье.
Это никак не нарушает желания заказчика и не доставляет лишних проблем для разработчика.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 15, 2020, 07:43
На самом деле без разницы, в каком часовом поясе хранить время. Главное ЗНАТЬ И ВВОДИТЬ поправку к текущему поясу.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Пантер от Июнь 15, 2020, 08:03
Нуу, не совсем... Врем на компе могут менять. Опять же, переход на зимнее или летнее... Вот узнай потом какое время было на компе год назад когда добавляли запись. А если хранить в UTC то становится пофиг на это вот все.


Название: Re: PostgreSQL QT5.4 пересылка данных между двумя базами timestamp
Отправлено: Примерный ученик от Июнь 23, 2020, 15:24
актуальность данных максимум неделя, все серверы синхронизируются по NTP от ведущего сервера. Ну а на будущее, согласен, Гринвич рулит.