gdmn icon indicating copy to clipboard operation
gdmn copied to clipboard

Некорректное чтение даты

Open sywka opened this issue 6 years ago • 5 comments

Иногда, стресс тест валится из-за ошибки сравнение дат. Причем может отработать и час и 10 часов без ошибок.

Что происходит:

  1. создание случайной даты - date1.
  2. запись date1 в базу.
  3. чтение даты из базы - date2.
  4. сравнение date1 и date2.

Ошибка происходит в пункте 4. Разница между датами небольшая - 1 час.

sywka avatar Dec 18 '18 11:12 sywka

Надо записать в лог какая именно дата генерируется, чтопишется в бд и что из нее потом читается. И еще в какой момент времени это происходит. Потом думать. Возможно претензии к драйверу, а может на нашей стороне что-то.

gsbelarus avatar Dec 18 '18 13:12 gsbelarus

время сервера: 2018-12-18T17:11:39.419Z сгенерировано: 2006-10-29T00:46:29.036Z считано: 2006-10-28T23:46:29.036Z

sywka avatar Dec 19 '18 10:12 sywka

в ночь с 28 на 29 окт 2006 года был переход на зимнее время. вот этот час и вылазит.

gsbelarus avatar Dec 19 '18 10:12 gsbelarus

пока надо обеспечить совместимость с действующими базами фб. а именно дата записывается в базу и считывается как есть, без учета часового пояса. то что записывается, должно и считаться именно так.

PS: в ФБ 4 будут уже часовые пояса для дат и можно будет сделать по нормальному.

gsbelarus avatar Dec 19 '18 11:12 gsbelarus

Не совсем понимаю, как это возможно, когда у нас имеется клиент серверная архитектура, разве что если работать с датами и на клиенте и на сервере в UTC.

На данный момент для передачи дат между клиентом и сервером используется стандартная сериализация объекта Date в json (YYYY-MM-DDTHH:MM:SSZ с тайм зоной Z)

Другими словами, когда клиент посылает дату со своей локалью, она переводится в зону Z и передается на сервер. После чего на сервере происходит конвертация ее в локальную зону сервера и запись в БД в этом виде. При отправке даты с сервера на клиент, произойдут те же манипуляции с датой.

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

sywka avatar Dec 26 '18 14:12 sywka