Работа с сервером и смещение часового пояса клиента - PullRequest
1 голос
/ 25 апреля 2011

Я работаю над приложением (используя среду Spring), в котором текущее время сохраняется в БД при каждом добавлении новых записей.

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

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

Как лучше всего решить эту проблему?

После нескольких поисков и прочтения нескольких ответов на SO я рассматриваю два варианта:

1) Получение часового пояса пользователя с использованием javascript или с адреса ip и сохранение его в БД вместо времени сервера.

2) Отображение пользователя, время относительно текущего времени для недавно добавленных записей (например, added 2 mins ago до added 1 day ago, а для более ранних записей - фактическая дата.

Не учитывая первый, так как я считаю, что это приведет к несоответствию между первичным ключом и столбцом created at в таблицах. В настоящее время не может быть вредным, поскольку пользователи видят только свои собственные записи, но могут привести к путанице, если записи друг друга будут показаны им в будущем.

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

Хотелось бы узнать любые другие подходы.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Делайте # 2, пока вы можете сойти с рук. Это можно использовать, если у вас есть временная метка, связанная с каждым фрагментом данных. Если вам нужно показать фактическую дату (например, в календаре), вы должны сделать # 1 (или что-то подобное).

Javascript использует время компьютера, поэтому вы всегда можете преобразовать время сервера в местное время, используя Javascript, если вы знаете часовой пояс сервера. Если по какой-либо причине вам необходимо хранить данные в базе данных в часовом поясе пользователя, всегда сохраняйте часовой пояс вместе со временем; иначе это бессмысленно. Возможно, лучшим вариантом в этом случае является сохранение времени в серверном времени и сохранение часового пояса пользователя в другом месте, а затем преобразование времени, когда это необходимо (как можно позднее).

0 голосов
/ 05 мая 2011

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

Имейте в виду, что это в основном административный пользовательский интерфейс, поэтому обычный пользователь предпочитает делать математические вычисления при просмотре зарегистрированных событий, а затем при планировании следующего запуска процесса: это мои 6 утра или их 6 утра? Будет ли это завершено к 8 утра, когда бизнес-пользователям понадобятся данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...