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

在Java中按国家/地区获取时区,java,timezone,Java,Timezone,我的应用程序托管在美国。服务器时区以GMT为单位。现在,当全球各地的用户访问此应用程序时,我希望获得访问该应用程序的国家/地区的时区。比如说,我是从欧洲的某个地方访问的。我想知道特定地区的时区。我希望这是用Java来完成的。我不完全确定您实际上在问什么,因为我相信您可以自己回答这个问题 您无法直接从http请求中获取时区,如下所述: 但您可以通过ip地址来确定。此处提及: 还可以使用getTimeZoneOffset()。此处提及: 在注册时提示用户输入gmt或国家代码(并由此计算gmt)

我的应用程序托管在美国。服务器时区以GMT为单位。现在,当全球各地的用户访问此应用程序时,我希望获得访问该应用程序的国家/地区的时区。比如说,我是从欧洲的某个地方访问的。我想知道特定地区的时区。我希望这是用Java来完成的。

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

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

但您可以通过ip地址来确定。此处提及:

还可以使用getTimeZoneOffset()。此处提及:


在注册时提示用户输入gmt或国家代码(并由此计算gmt)似乎更容易。

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

有相当多的数据库包含这些信息。
例如,查看一个数据库,该数据库具有IP地址到各种位置信息的映射信息。
您可以将数据加载到本地数据库,并使用被叫方的IP地址进行查询。(当您使用Java servlet时,在您的
HttpRequest
中就有了它。)
该数据库的商业版(90美元)也有时区

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

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


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

您可以采取两种方法:

  • 检测平台设置
  • 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>
    
    
    var tz_info=jstz.determine_timezone();
    var时区=tz_info.timezone;
    var tz_id=“”;
    如果(时区!=“未定义”){
    时区。模糊性检查();
    tz_id=timezone.olson_tz;
    警报(tz_id);//奥尔森时区,例如“欧洲/伦敦”、“亚洲/东京”等。
    }               
    
    这比摆弄IP地理定位要容易得多,因为大多数人都将他们的计算机/设备设置为“正确”的时区,所以大部分时间都是正确的。

    首先,我们必须这样做

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

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

    这是一个web应用程序还是其他什么?我不认为jdk/jre会打包这个。他们有一个TZ数据库,但他们没有将位置映射到TZ@Jon,这是一个网站application@user1445777:在这种情况下,您需要依靠Javascript为您提供真正的时区,除非您以其他方式知道用户所在的位置。你知道吗?(例如,IP地理编码是一种选择——或者用户可能以其他方式指定了他们的位置。)