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

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

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

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

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

另外两种方法:

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

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

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

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

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

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

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


无论如何:W3C在其W3C Web国际化常见问题中有这样的问题: 使用HTTP Accept-Language标头来确定用户的语言环境是一个好主意吗?