【发布时间】:2011-02-23 07:46:11
【问题描述】:
当我只有他们的 IP 地址时,有没有办法找到用户所在的时区?我正在寻找我需要应用到服务器时间的时间偏移,以便找到用户位置的时间。
【问题讨论】:
标签: c# .net timezone ip-address
当我只有他们的 IP 地址时,有没有办法找到用户所在的时区?我正在寻找我需要应用到服务器时间的时间偏移,以便找到用户位置的时间。
【问题讨论】:
标签: c# .net timezone ip-address
您需要尝试确定位置(远非 100% 准确)。看 this question 关于这样做。
请参阅 this question 关于将邮政编码转换为时区的信息(尽管这又不是 100% 万无一失的)。
简短的版本是:它很复杂。您必须使用第三方服务来维护位置的 IP 掩码数据库,然后使用在那里确定的位置来确定时区。
让客户端在连接时简单地发送时区(或 UTC 偏移量)要可靠得多。
如果这是一个 Web 应用程序,请参阅 one more question 关于使用 JavaScript 确定客户端时区。
【讨论】:
您可以使用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
【讨论】:
MaxMind 提供了一个可以帮助您完成任务的数据库: http://www.maxmind.com/app/city
【讨论】:
ip2nation 提供了一个 SQL 数据库,您可以查询该数据库来定位 IP 地址:
http://www.ip2nation.com/ip2nation/Download
有了国家代码,您可以通过查询另一个数据库或库来检索一个国家的时区。
【讨论】:
使用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;
【讨论】: