Есть ли другой способ получить часовой пояс пользователя из объекта HttpServletRequest в Spring MVC?
Мне нужно преобразовать время моего сервера в пользовательское время в зависимости от их часового пояса.
Это лучший способ выяснить свой часовой пояс - с помощью объекта HttpServletRequest?
Locale clientLocale = request.getLocale();
Calendar calendar = Calendar.getInstance(clientLocale);
TimeZone clientTimeZone = calendar.getTimeZone();
Ответы
Ответ 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 для определения локали пользователя?