是否有另一种方法可以从 Spring MVC 中的 HttpServletRequest 对象获取用户的时区? [复制]

Posted

技术标签:

【中文标题】是否有另一种方法可以从 Spring MVC 中的 HttpServletRequest 对象获取用户的时区? [复制]【英文标题】:Is there another way to get a user's time zone from a HttpServletRequest object in Spring MVC? [duplicate] 【发布时间】:2011-08-30 19:30:08 【问题描述】:

我需要根据他们的时区将我的服务器时间转换为用户的时间。

这是通过使用 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 上应用更改。然而,我不会严格依赖这一点。它至少应该可以由最终用户自己配置。

【讨论】:

【参考方案3】:

为您的客户提供一个下拉框,他可以在其中输入正确的时区。并默认使用您从语言环境中确定的那个。


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

【讨论】:

时区和语言是独立的。俄罗斯有 9 个时区,ru_RU? 应该使用哪个时区。居住在日本且语言环境设置为 en_US 的人希望看到美式英语网页和 JST 时间 @user454322:这就是为什么它只是默认值并且用户可以更改它们的原因。另一方面,它适用于许多语言环境。

以上是关于是否有另一种方法可以从 Spring MVC 中的 HttpServletRequest 对象获取用户的时区? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

是否有另一种方法可以在 Eloquent 模型上“设置连接”?

是否有另一种方法可以在 PHP 中编写字符串文字(不带 ' 或 ")?

您如何更新priority_queue中的值,或者是不是有另一种方法可以在c ++中更新堆中的键

是否有另一种方式(更有效的方式)来编写代码,以便它可以运行得更快?

是否有另一种方法来显式初始化父类?

当用户按下回车键时,是不是有另一种方法可以在移动 Safari(iOS 上)上触发自动更正/自动完成?