在Java中按国家/地区获取TimeZone

时间:2013-01-03 08:30:48

标签: java timezone

我的申请是在美国托管的。服务器时区采用GMT格式。现在,当人们从全球各地访问此应用程序时,我想获取访问它的国家/地区的时区。说 - 我从欧洲的一些地方进入。我想获得特定地区的时区。我希望这可以用Java完成。

4 个答案:

答案 0 :(得分:0)

我不完全确定你的实际问题,因为我相信你可以自己回答这个问题。

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

Is there another way to get a user's time zone from a HttpServletRequest object in Spring MVC?

但您可以通过IP地址确定它。这里提到:

How to programmatically find geo location of incoming http request?

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

User needs to display transaction in there local time as they login from different country.

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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:0)

您可以采取两种方法:

  1. 检测平台设置
  2. IP地理编码
  3. 方法1是使用javascript。我使用了一个模块,我发现here效果很好。我在“跳转页面”上使用了类似于此的代码,它只是选择时区,然后在登录流程中重定向(将时区作为参数传递)。

    <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地理定位容易得多,而且由于大多数人将他们的计算机/设备设置为“正确”的时区,因此大部分时间都是正确的。

答案 3 :(得分:0)

首先我们必须find the Time zone of a client

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

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;
}