JSP 如何在JAVA中通过IP地址获取时区

8dtrkrch  于 2022-12-07  发布在  Java
关注(0)|答案(5)|浏览(301)

我想通过JAVA中的IP地址获取时区。
实际上,我有一个应用程序,将运行在客户端机器。
我有客户端机器的IP地址。但无法获得每台客户端机器的时区。
在客户端计算机中

v1l68za4

v1l68za41#

用于通过IP地址获取时区;有地理时区,其中有一定范围的IP,代表一个复杂的时区和国家。2你可以下载所有的文件,是在CSV和创建一个数据库。3然后通过SQL查询,你可以得到你的时区。

ycggw6v2

ycggw6v22#

在Java中,会给予时区

java.util.TimeZone.getDefault();

如果要在服务器上获取客户机的时区,则在客户机上调用此函数并将其发送回服务器。

2izufjch

2izufjch3#

我认为这是不可能的。但是你可以做的是通过HTML使用JavaScript获得时区,然后通过表单提交或类似的方式检索这些数据。

kd3sttzy

kd3sttzy4#

使用getZoneFromIP地址(字符串IP):

private static String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
          sb.append((char) cp);
        }
        return sb.toString();
    }
    
        public String getZoneFormIpAddress(String ip) throws IOException{
          String zone = "inconnu";
          try {
              JSONObject json = readJsonFromUrl("https://api.ipdata.co/"+ip+"?api-key=test");
              zone = json.get("country_name")+" "+json.get("city");
          } catch (Exception e) {
          }
          return zone;
    } 
      
        public String getJsonCodeFromUrl(String url) throws IOException{
          JSONObject json = readJsonFromUrl(url);
          return json.toString();}
          public String getJsonValueByKey(String url, String key) throws IOException{
          JSONObject json = readJsonFromUrl(url);
          return (String) json.get(key);}

    public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {

        InputStream is = new URL(url).openStream();

        try {
          BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
          String jsonText = readAll(rd);
          JSONObject json = new JSONObject(jsonText);
          return json;
        } finally {
          is.close();
        }
    }
wydwbb8l

wydwbb8l5#

您可以使用ip2location.io的免费API。只需注册免费计划,您将获得API密钥,并与下面的代码一起使用。将IP更改为您要查询的任何IP地址。

try (java.util.Scanner s = new java.util.Scanner(new java.net.URL("https://api.ip2location.io/?key=YOUR_API_KEY&ip=8.8.8.8&format=json&lang=en").openStream(), "UTF-8").useDelimiter("\\A")) {
    System.out.println(s.next());
} catch (java.io.IOException e) {
    e.printStackTrace();
}

相关问题