如何检测客户端的时区?

Posted

技术标签:

【中文标题】如何检测客户端的时区?【英文标题】:How to detect the timezone of a client? 【发布时间】:2011-03-01 09:13:54 【问题描述】:

如何在 jsp 中获取客户端/请求时区?

【问题讨论】:

【参考方案1】:

很遗憾,此信息未在 HTTP 标头中传递。

通常您需要配合 javascript 为您获取它。 网上很多例子,这里有一个http://www.coderanch.com/t/486127/JSP/java/Query-timezone

【讨论】:

【参考方案2】:

您无法获取时区,但您可以从客户端获取当前时间。即通过 javascript 而不是回发。在服务器端,您可以将该时间转换为 GMT/UTC。 UTC 显示时区。

【讨论】:

【参考方案3】:

如果您只需要本地时区来向用户显示本地时间,我建议您使用 UTC 表示您服务中的所有时间,并使用 Moment.js 在浏览器中将它们呈现为本地时间。

我的一般规则是在任何地方都以 UTC 处理和存储时间,除了在与用户的界面处,您可以在此处转换为本地时间/从本地时间转换。 UTC 的优点是您永远不必担心夏令时调整。

请注意,如果您想显示某事物的年龄(例如“3 小时前发布”),您只需将 UTC 时间戳与当前 UTC 时间进行比较;根本不需要转换为当地时间。

【讨论】:

我有一个要求,我必须下载 pdf 格式的数据。所以需要在pdf中显示用户时区的日期。我该怎么做。【参考方案4】:

对我来说最好的解决方案是将日期/时间作为字符串发送,然后使用服务器的时区进行解析以获取时间戳。时间戳始终是 UTC(或应该是),因此您不需要客户的 TimeZone。

例如,发送“10/07/2018 12:45”可以这样解析:

SimpleDateFormat oD = new SimpleDateFormat();
oD.applyPattern("dd/MM/yyyy HH:mm");
oD.setTimeZone(TimeZone.getDefault()); // ;)
Date oDate = oD.parse(request.getParameter("time"));

显然您可以设置特定的日期/时间格式。

【讨论】:

以上是关于如何检测客户端的时区?的主要内容,如果未能解决你的问题,请参考以下文章

在客户端检测时区[重复]

使用 Shiny 时如何检索客户端的当前时间和时区?

使用 Google AppEngine XMPP 库查询客户端的时区

如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间

Socket服务器端如何检测客户端的连接状态?

在 JSF 中 - 获取客户端的区域设置(在浏览器的时区中显示时间)