有没有办法根据地理编码位置获取时区的UTC偏移量?

时间:2008-12-14 20:47:58

标签: ruby-on-rails ruby timezone

当我有用户的地址或邮政编码时,这会很有用,并用它来查找时区,这样他们就不必在单独的字段中输入它。

5 个答案:

答案 0 :(得分:3)

我建议不要尝试从用户邮政编码中推断出时区。

向用户提出问题:

“你的邮政编码是什么”不太可能经常改变。

它会改变,但可能不那么频繁,然后问题是“你在哪个时区”。

例如,如果用户在某个地方旅行,他们的邮政编码没有改变,但他们的时区有。

如果你试着询问“你的邮政编码是什么?”,用户可能不会知道,特别是如果他或她正在旅行。

相反,我会尝试直接找出时区。

大多数平台都会为您提供一种方法。

例如,如果您正在为.NET编写桌面软件,则可以通过

执行此操作
  1. 使用TimeZoneInfo类或
  2. 获取当前时区
  3. 以UTC时间从服务器向客户端发送所有时间,然后使用DateTime.ToLocal Time将UTC时间转换为本地时间。
  4. 或者,如果您正在编写Web软件,那么您可以使用Java Script从用户的Web浏览器获取时区并将其提交给服务器。

    查看以下日期函数:

    http://www.w3schools.com/jsref/jsref_obj_date.asp

    您可以使用各种日期函数推断出时区。

    有一个方法“getTimezoneOffset”,但它没有给出+/-。因此,例如,对于+1和-1 GMT,它将给出“1”,这可能是个问题。

    但是,您可以从服务器发送已知日期,使用转换方法将其转换为本地时间,然后将结果发送回服务器。

    当您发送已知日期时,您应该将其作为毫秒偏移量发送。这样你可以避免任何文化问题(日期在不同的地方的格式不同)。

    Win32函数可以为您提供时区,我相信可能会有Unix,Mac和Java APIS做同样的事情。

答案 1 :(得分:1)

最近在A D Olson运营的时区邮件列表中对此进行了讨论,后者创建了时区名称和规则的Olson数据库。没有一个简单的来源(这并不奇怪,真的;有很多国家,有很多不同的规则)。

我遇到的一些信息的位置之一是www.geonames.org。这尤其是在2008年9月。您可以通过匿名FTP从Elsie下载邮件列表存档(大约17 MB,可追溯到90年代初,如果不是之前的话)。这些电子邮件提到ESRI是一个信息来源。

答案 2 :(得分:1)

我记得有一个数据集为时区信息提供了邮政编码。该数据集可能来自以下之一:USPS,人口普查或NOAA(用于天气预报)。

对不起,我无法提供更多相关信息。

答案 3 :(得分:0)

您可以使用GeoIP从其IP地址获取lat长,从而获得转换为其时区的纬度/经度。

http://www.hostip.info/

您可以拨打他们的网络服务,也可以自己下载数据库。

然而,有一些警告。

  1. 如果用户有代理服务器,您将获得其代理IP。
  2. 有些IP不翻译

答案 4 :(得分:0)

是的 - 您可以使用geonames.org等地理编码器从邮政编码中获取纬度,经度(地理编码器也可能包含时区或者有单独的网络服务)。

如果您的地理编码器没有这样做,那么根据纬度和经度,您可以从此网络服务获得时区:

http://www.earthtools.org/webservices.htm#timezone