当我有用户的地址或邮政编码并使用它来查找他们的时区时,这将很有用,因此他们不必在单独的字段中输入它。
5 回答
我建议不要尝试从用户的邮政编码中推断出时区。
给用户的问题:
“您的邮政编码是多少”不太可能经常更改。
它会改变,但可能不如“你在哪个时区”这个问题那么频繁。
例如,如果用户到某个地方旅行,他们的邮政编码没有改变,但他们的时区改变了。
如果您尝试询问“您在哪个邮政编码?”,用户可能不知道,特别是如果他或她正在旅行。
相反,我会尝试直接弄清楚时区是什么。
大多数平台都会给你一种方法来做到这一点。
例如,如果您正在为 .NET 编写桌面软件,您可以通过
- 使用 TimeZoneInfo 类获取当前时区,或
- 以 UTC 时间从服务器发送所有时间到客户端,然后使用 DateTime.ToLocal Time 将 UTC 时间转换为本地时间。
或者,如果您正在编写 Web 软件,那么您可以使用 Java Script 从用户的 Web 浏览器获取时区并将其提交给服务器。
看看以下日期函数:
http://www.w3schools.com/jsref/jsref_obj_date.asp
您可以使用各种日期函数推断时区。
有一种方法“getTimezoneOffset”,但它没有给出 +/-。因此,例如,对于 +1 和 -1 GMT,它将给出“1”,这可能是一个问题。
但是,您可以做的是从服务器发送一个已知日期,使用转换方法将其转换为本地时间,然后将结果发送回服务器。
当您向下发送已知日期时,您可能应该将其作为毫秒偏移量发送。这样您就可以避免任何文化问题(不同地方的日期格式不同)。
有 Win32 函数可以为您提供时区,我相信可能有 Unix、Mac 和 Java APIS 可以做同样的事情。
我记得曾经有一个数据集为时区信息提供邮政编码。该数据集可能来自以下之一:USPS、人口普查或 NOAA(用于天气预报)。
抱歉,我无法提供更多信息。
最近在 AD Olson 运行的时区邮件列表中讨论了这一点,他创建了时区名称和规则的 Olson 数据库。没有一个单一的、简单的来源(这并不奇怪,真的;有很多国家,还有很多不同的规则)。
我遇到并添加书签的一些信息的位置之一是www.geonames.org。尤其是在 2008 年 9 月。您可以通过匿名 FTP 从Elsie下载邮件列表存档(大约 17 MB,可以追溯到 90 年代初,如果不是更早的话)。这些电子邮件提到 ESRI 作为信息来源。
是的 - 您可以使用 geonames.org 等地理编码器从邮政编码中获取纬度、经度(地理编码器还可能包含时区或为此提供单独的网络服务)。
如果您的地理编码器不这样做,那么给定纬度和经度,您可以从此网络服务获取时区:
您可以使用 GeoIP 从他们的 IP 地址获取经纬度,从而获得他们的纬度/经度以转换为他们的时区。
您可以调用他们的网络服务,也可以自己下载数据库。
但是,有一些警告。
- 如果用户有代理服务器,您将获得他们的代理 IP。
- 有些 IP 不翻译