如何检测客户端的时区?
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"));
显然您可以设置特定的日期/时间格式。
【讨论】:
以上是关于如何检测客户端的时区?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google AppEngine XMPP 库查询客户端的时区