【问题标题】:Find time zone from IP address从 IP 地址查找时区
【发布时间】:2011-02-23 07:46:11
【问题描述】:

当我只有他们的 IP 地址时,有没有办法找到用户所在的时区?我正在寻找我需要应用到服务器时间的时间偏移,以便找到用户位置的时间。

【问题讨论】:

    标签: c# .net timezone ip-address


    【解决方案1】:

    您需要尝试确定位置(远非 100% 准确)。看 this question 关于这样做。

    请参阅 this question 关于将邮政编码转换为时区的信息(尽管这又不是 100% 万无一失的)。

    简短的版本是:它很复杂。您必须使用第三方服务来维护位置的 IP 掩码数据库,然后使用在那里确定的位置来确定时区。

    让客户端在连接时简单地发送时区(或 UTC 偏移量)要可靠得多。

    如果这是一个 Web 应用程序,请参阅 one more question 关于使用 JavaScript 确定客户端时区。

    【讨论】:

      【解决方案2】:

      您可以使用ipapi.co 从 IP 地址获取用户的时区和 UTC 偏移量:

      https://ipapi.co/8.8.8.8/timezone
      > America/Los_Angeles
      
      https://ipapi.co/8.8.8.8/utc_offset
      > -0800
      

      【讨论】:

        【解决方案3】:

        MaxMind 提供了一个可以帮助您完成任务的数据库: http://www.maxmind.com/app/city

        【讨论】:

        • 我们已经使用 MaxMind 的免费 G​​eoIP.dat 数据库进行国家/地区查询,但它没有提供时区。发布在他们网站上的时区文本文件 (maxmind.com/timezone.txt) 也没什么用
        【解决方案4】:

        ip2nation 提供了一个 SQL 数据库,您可以查询该数据库来定位 IP 地址:
        http://www.ip2nation.com/ip2nation/Download

        有了国家代码,您可以通过查询另一个数据库或库来检索一个国家的时区。

        【讨论】:

          【解决方案5】:

          使用restSharp.org 和我的服务ipdata.co

          var client = new RestClient("https://api.ipdata.co?api-key=test");
          var request = new RestRequest("1.1.1.1", Method.GET);
          request.AddHeader("Content-Type", "application/json");
          IRestResponse response = client.Execute(request);
          var content = response.Content; // raw content as string
          RestResponse<Ip> response2 = client.Execute<Ip>(request);
          var time_zone = response2.Data.time_zone;
          

          【讨论】:

            猜你喜欢
            • 2014-11-06
            • 2021-02-12
            • 2015-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-19
            • 2022-12-15
            • 2012-11-17
            相关资源
            最近更新 更多