Есть ли способ получить смещение UTC для часового пояса на основе геокодированного местоположения? - PullRequest
4 голосов
/ 14 декабря 2008

Это было бы полезно, когда у меня есть адрес пользователя или почтовый индекс, и я использовал его, чтобы найти часовой пояс, чтобы им не приходилось вводить его в отдельном поле.

Ответы [ 5 ]

3 голосов
/ 15 декабря 2008

Я бы рекомендовал не пытаться определить часовой пояс из почтового индекса пользователя.

Пользователю вопрос:

"Какой у вас почтовый индекс", скорее всего, не изменится очень часто.

Это изменится, но, вероятно, реже, чем вопрос "в каком часовом поясе вы находитесь".

Например, если пользователь путешествует куда-то, его почтовый индекс не изменился, но его часовой пояс изменился.

Если вы попытаетесь спросить «в каком почтовом индексе вы находитесь?», Пользователь, вероятно, не узнает, особенно если он или она путешествует.

Вместо этого я бы попытался выяснить, что такое часовой пояс напрямую.

Большинство платформ даст вам возможность сделать это.

Например, если вы пишете настольное программное обеспечение для .NET, вы можете сделать это с помощью

  1. Получение текущего часового пояса с использованием класса TimeZoneInfo или
  2. Отправка все время с сервера на клиент в UTC время, а затем использовать DateTime.ToLocal Time для преобразования времени UTC в местное время.

Или, если вы пишете веб-программное обеспечение, вы можете получить часовой пояс из веб-браузера пользователя с помощью Java Script и отправить его на сервер.

Посмотрите на следующие функции даты:

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

Вы можете определить часовой пояс, используя различные функции даты.

Существует метод "getTimezoneOffset", но он не дает +/-. Так, например, он дал бы «1» для +1 и -1 по Гринвичу, что может быть проблемой.

Однако вы можете отправить с сервера известную дату, преобразовать ее в местное время, используя методы преобразования, а затем отправить результат обратно на сервер.

Когда вы отправляете известную дату вниз, вам, вероятно, следует отправить ее в виде миллисекундного смещения. Таким образом, вы можете избежать любых культурных проблем (даты по-разному форматируются в разных местах).

Существуют функции Win32, которые предоставляют вам часовой пояс, и я уверен, что, вероятно, Unix, Mac и Java APIS будут делать то же самое.

1 голос
/ 15 декабря 2008

Это недавно обсуждалось в списке рассылки о часовых поясах, который вел А. Д. Олсон, создавший базу данных имен и правил часовых поясов Олсона. Нет ни одного простого источника (что неудивительно, на самом деле, есть много стран и множество разных правил).

Одно из мест для получения информации, на которую я наткнулся и добавило в закладки, - www.geonames.org . Это было особенно в сентябре 2008 года. Вы можете скачать архив списка рассылки по анонимному FTP с Elsie (около 17 МБ, начиная с начала 90-х, если не раньше). В электронных письмах упоминается ESRI в качестве источника информации.

1 голос
/ 15 декабря 2008

Я помню один раз, когда у меня был набор данных, который предоставлял почтовый индекс для информации о часовом поясе. Этот набор данных, вероятно, поступил из одного из: USPS, переписи или NOAA (для прогнозов погоды).

Извините, я не могу предоставить больше информации, чем это.

0 голосов
/ 19 июня 2009

Вы можете использовать GeoIP, чтобы получить значение long long по их IP-адресу, получая, таким образом, значение lat / long для перевода в часовой пояс.

http://www.hostip.info/

Вы можете позвонить в их веб-сервис или загрузить базу данных самостоятельно.

Однако есть предостережения.

  1. Если у пользователя есть прокси-сервер, вы получите его прокси-IP.
  2. Некоторые IP-адреса не переводятся
0 голосов
/ 17 декабря 2008

Да - вы можете использовать геокодер, такой как geonames.org, чтобы получить широту и долготу из почтового индекса (геокодер может также включать часовой пояс или иметь для этого отдельный веб-сервис).

Если ваш геокодер этого не делает, то с учетом широты и долготы вы можете получить часовой пояс из этого веб-сервиса:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...