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

Rog*_*ger 12 java spring servlets spring-mvc

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

这是通过使用HttpServletRequest对象来确定其时区的最佳方法吗?

Locale clientLocale = request.getLocale();  
Calendar calendar = Calendar.getInstance(clientLocale);  
TimeZone clientTimeZone = calendar.getTimeZone();
Run Code Online (Sandbox Code Playgroud)

Jon*_*ley 15

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

另外两种方法:

  • 在客户端的IP上使用GeoIP对其位置进行攻击,然后查找(从tz)关闭时区
  • 使用客户端Javascript计算它们与UTC的偏移量(从本地时间减去UTC),然后查找与该偏移量匹配的时区(这不会非常精细,因为许多时区是例如+11小时.您可能能够与以上).

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


Bal*_*usC 12

你无法从中得到它HttpServletRequest.信息不存在.

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

var offset = new Date().getTimezoneOffset();
// ...
Run Code Online (Sandbox Code Playgroud)

您可以使用它作为(ajax)参数发送回服务器或在呈现的HTML上应用更改.但是我不会严格依赖于此.它至少应该由最终用户自己配置.