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

时间:2011-05-23 00:41:39

标签: java spring spring-mvc servlets

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

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

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

3 个答案:

答案 0 :(得分:15)

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

另外两种可能的方法:

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

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

答案 1 :(得分:12)

你无法从HttpServletRequest获得它。信息不存在。

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

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

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

答案 2 :(得分:3)

为您的客户提供一个下拉框,他可以在其中输入正确的时区。并使用默认情况下从区域设置中确定的那个。


无论如何:W3C在其W3C Web国际化常见问题中有这样的问题: Is it a good idea to use the HTTP Accept-Language header to determine the locale of the user?