有没有另一种方法可以从Spring MVC中的HttpServletRequest对象获取用户的时区?

2022-09-04 06:46:54

我需要将服务器时间转换为用户的时间,具体取决于用户的时区。

这是找出其时区的最佳方法吗 - 通过使用HttpServletRequest对象?

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

答案 1

遗憾的是,您无法从用户的请求中获取用户的时区,因为客户端不会发送数据。请求对象中的区域设置基于用户的 Accept-Language 标头。“英语”的正确时区是什么?

另外两种可能的方法:

  • 在客户端的 IP 上使用 GeoIP 在其位置进行标记,并查找(从 tz)接近的时区
  • 使用客户端Javascript计算它们与UTC的偏移量(从本地时间减去UTC),然后查找与该偏移量匹配的时区(这不会非常精细,因为许多时区都是例如+11小时。您也许可以与上述内容结合使用)。

但是,没有真正好的简单解决方案 - 这就是为什么大多数网站会询问用户的时区,或者以相对格式显示日期(例如5小时前)。


答案 2

您无法从 中获取它。信息不存在。HttpServletRequest

但是,在 JavaScript 中,您可以按如下方式获得时区偏移量:

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

您可以使用它作为 (ajax) 参数发送回服务器,或对呈现的 HTML 应用更改。然而,我不会严格依赖这一点。它至少应该可以由最终用户本身配置。


推荐