Подтвердить что ты не робот

Есть ли другой способ получить часовой пояс пользователя из объекта HttpServletRequest в Spring MVC?

Мне нужно преобразовать время моего сервера в пользовательское время в зависимости от их часового пояса.

Это лучший способ выяснить свой часовой пояс - с помощью объекта HttpServletRequest?

Locale clientLocale = request.getLocale();  
Calendar calendar = Calendar.getInstance(clientLocale);  
TimeZone clientTimeZone = calendar.getTimeZone();
4b9b3361

Ответ 1

К сожалению, вы не можете получить часовой пояс пользователя из своего запроса, так как клиент не отправляет данные. Локаль в объекте запроса основан на заголовке Accept-Language пользователя. Каков правильный часовой пояс для "английского"?

Два других возможных подхода:

  • Используйте GeoIP на IP-адресе клиента, чтобы иметь удар в их местоположении, и посмотрите (с tz) на близкий часовой пояс
  • Использовать Javascript на стороне клиента для расчета их смещения от UTC (вычесть UTC из локального времени), а затем просмотреть временные интервалы, соответствующие этому смещению (это не будет очень зернистым, так как многие часовые пояса, например, +11 часов. в сочетании с вышесказанным).

Там нет реального хорошего простого решения - именно поэтому большинство сайтов будут запрашивать часовой пояс пользователя или отображать даты в относительном формате (например, 5 часов назад).

Ответ 2

Вы не можете получить его из HttpServletRequest. Информация отсутствует.

В JavaScript, однако, вы можете получить смещение временной зоны следующим образом:

var offset = new Date().getTimezoneOffset();
// ...

Вы можете использовать его для отправки обратно на сервер как (ajax) или для применения изменений на визуализированном HTML. Однако я бы не стал строго полагаться на это. Он должен, по крайней мере, настраиваться самим enduser.

Ответ 3

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


В любом случае: W3C задает эти вопросы в своих часто задаваемых вопросах W3C Web Internationalization: Полезно ли использовать заголовок HTTP-Accept-Language для определения локали пользователя?