我需要将服务器时间转换为用户的时间,具体取决于他们的时区。
这是通过使用HttpServletRequest对象找出时区的最佳方式吗?
Locale clientLocale = request.getLocale();
Calendar calendar = Calendar.getInstance(clientLocale);
TimeZone clientTimeZone = calendar.getTimeZone();
答案 0 :(得分:15)
很遗憾,您无法从请求中获取用户的时区,因为客户端不会发送数据。请求对象中的区域设置基于用户的Accept-Language标头。什么是“英语”的正确时区?
另外两种可能的方法:
虽然没有真正好的简单解决方案 - 这就是为什么大多数网站会询问用户的时区,或以相对格式显示日期(例如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?