0

我的应用程序托管在美国。服务器时区为 GMT。现在,当人们从全球范围内访问此应用程序时,我想获取访问它的国家/地区的时区。说 - 我正在从欧洲的某个地方访问。我想获取该特定地区的时区。我希望这可以在 Java 中完成。

4

4 回答 4

0

您需要先将客户端 IP 地址映射到地理位置。

有很多数据库都有这些信息。
例如,查看DB-IP,这是一个数据库,其中包含 IP 地址到各种位置信息的映射信息。
您可以将数据加载到本地数据库并使用调用 IP 地址进行查询。(HttpRequest当您使用 Java Servlets 时,您的 . 中有这个。)
数据库的商业版本(90 美元)也包含时区。

其他可能性包括使用 Web 服务,例如IP2Location。当客户端发出请求时,您将从服务请求数据。当然,这可能会很慢,并且您依赖于远程服务的可用性。

周围还有其他数据库和服务,请找到适合您需求的数据库和服务。

我没有找到一个免费的并且里面有时区信息的。当涉及到更大的国家时,一个国家的信息肯定是不够的。

于 2013-01-03T09:02:42.150 回答
0

您可以采取两种方法:

  1. 检测平台设置
  2. IP地理编码

方法 1 是为此使用 javascript。我使用了一个我在这里找到的模块,效果很好。我在“跳转页面”上使用了与此类似的代码,它只获取时区,然后在登录流程中重定向(将时区作为参数传递)。

<script type="text/javascript" src="/script/detect_timezone.js"></script>
<script type="text/javascript">
var tz_info = jstz.determine_timezone();
var timezone = tz_info.timezone;
var tz_id='';
if (timezone != 'undefined') {
    timezone.ambiguity_check();
    tz_id = timezone.olson_tz;
    alert(tz_id); // olson timezone, e.g. "Europe/London", "Asia/Tokyo" etc.
}               
</script>

这比搞乱 IP 地理定位要容易得多,而且由于大多数人都将他们的计算机/设备设置为他们的“正确”时区,所以大部分时间都是正确的。

于 2013-01-03T09:14:30.367 回答
0

我不完全确定您实际上在问什么,因为我相信您可以自己回答这个问题。

您无法直接从 http 请求中获取时区,如此处所述:

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

但是你可以通过ip地址来判断。这里提到:

如何以编程方式查找传入http请求的地理位置?

您也可以使用 getTimeZoneOffset()。这里提到:

用户从不同国家/地区登录时,需要在本地时间显示交易。

在注册中提示用户输入 gmt 或国家代码(并从中计算 gmt)似乎仍然更容易。

于 2013-01-03T08:48:05.173 回答
0

首先,我们必须找到客户端的时区

然后根据时区,我们必须按如下方式获取时间:

public String getLocalTime(String timezone) {
    TimeZone tz = TimeZone.getTimeZone(timezone);
    Calendar localtime = new GregorianCalendar(tz);
    String strLocalTime = localtime.get(Calendar.HOUR_OF_DAY) + ":"
            + localtime.get(Calendar.MINUTE) + ":" + localtime.get(Calendar.SECOND);
    return strLocalTime;
}
于 2013-01-03T09:19:15.343 回答