Когда пользователи регистрируются в нашем приложении, мы можем определить их почтовый индекс, когда проверяем их по национальной базе данных. Как лучше всего определить вероятное предположение об их часовом поясе по этому почтовому индексу?
Мы пытаемся свести к минимуму объем данных, которые мы явно должны запрашивать. Они смогут вручную установить часовой пояс позже, если наше предположение окажется неверным. Я понимаю, что почтовые индексы не помогут определить часовой пояс за пределами США, но в этом случае нам все равно придется вручную спрашивать, и мы работаем преимущественно с США, несмотря на это.
Я нашел много баз данных почтовых индексов, и пока только некоторые из них содержат информацию о часовых поясах, но те, которые есть, не являются бесплатными, например, эта . Если для этого абсолютно необходимо оплатить подписку на услугу, это не будет стоить того, и нам просто нужно будет напрямую спросить пользователей.
Хотя язык не особенно актуален, поскольку я, вероятно, могу конвертировать что угодно, но мы используем PHP и MySQL.
Ответы:
Я только что нашел бесплатную zip-базу данных, которая включает смещение по времени и участие в DST. Мне действительно нравится ответ Эрика Дж., Так как он поможет мне выбрать фактический часовой пояс, а не просто смещение (потому что вы никогда не можете быть полностью уверены в правилах), но я думаю, что могу начать с этого и попытаться найти лучшее совпадение часового пояса на основе конфигурации смещения / летнего времени. Я думаю, что могу попытаться настроить простую версию ответа Development 4.0, чтобы проверить, что я получаю из информации zip в качестве теста на работоспособность. Это определенно не так просто, как я бы надеялся, но комбинация должна дать мне как минимум 90% уверенности в часовом поясе пользователя.
источник
Большинство штатов находятся точно в одном часовом поясе (хотя есть несколько исключений). Большинство почтовых индексов не пересекают границы штата (хотя есть несколько исключений).
Вы можете быстро составить свой собственный список часовых поясов для каждого zip-архива, объединив эти факты.
Вот список диапазонов почтовых индексов для каждого штата и список состояний для каждого часового пояса .
Вы можете увидеть границы почтовых индексов и сравнить их с картой часовых поясов, используя эту ссылку или Google Планета Земля, чтобы сопоставить почтовые индексы с часовыми поясами для штатов, которые разделены линией часовых поясов.
Большинство неамериканских стран, с которыми вы имеете дело, вероятно, находятся точно в одном часовом поясе (опять же, есть исключения). В зависимости от ваших потребностей вы можете посмотреть, откуда приходят ваши самые популярные посетители из неамериканских стран, и просто посмотреть их часовой пояс.
источник
Я создал таблицу базы данных MySQL с открытым исходным кодом (под лицензией MIT), которая перекрестно ссылается на почтовые индексы и часовые пояса, и загрузил ее на sourceforge.net:
http://sourceforge.net/projects/zip2timezone/files/
Он получен из четырех мест (основной API Yahoo PlaceFinder - спасибо @Chris N)
См. Файл README для получения дополнительной информации и инструкций.
источник
Если вы хотите, вы также можете почувствовать часовой пояс, спросив у браузера, что Джош Фрейзер написал об этом здесь.
Второе, что вам нужно знать, это то, соблюдается ли в этом месте летнее время (DST) или нет. Поскольку летнее время всегда наблюдается летом, мы можем сравнить смещение по времени между двумя датами в январе со смещением по времени между двумя датами в июне. Если смещения разные, то мы знаем, что в этом месте соблюдается летнее время. Если смещения такие же, то мы знаем, что в этом месте НЕ соблюдается летнее время.
Вся заслуга в этом принадлежит Джошу Фрейзеру.
Это может помочь вам с клиентами за пределами США и может дополнить ваш подход к использованию zip.
Вот вопросы SO, которые касаются получения часового пояса из javascript
источник
У Google для этого есть специальный API: https://developers.google.com/maps/documentation/timezone/
например: https://maps.googleapis.com/maps/api/timezone/json?location=40.704822,-74.0137431×tamp=0
Для них требуется временная метка unix в строке запроса. Из возвращенного ответа видно, что
timeZoneName
учитывается переход на летнее время на основе метки времени, аtimeZoneId
имя часового пояса не зависит от летнего времени.Для моего использования в Python я просто передаю
timestamp=0
и используюtimeZoneId
значение для полученияtz_info
объекта из pytz , затем я могу использовать его для локализации любого конкретного datetime в моем собственном коде.Я считаю, что и для PHP вы можете найти «America / New_York» в http://pecl.php.net/package/timezonedb
источник
Ruby gem для преобразования почтового индекса в часовой пояс: https://github.com/Katlean/TZip (разветвлен с https://github.com/farski/TZip ).
Он быстрый, небольшой и не имеет внешних зависимостей, но имейте в виду, что почтовые индексы просто не соответствуют часовым поясам.
источник
Я работал над этой проблемой на своем собственном сайте и чувствую, что нашел довольно хорошее решение.
1) Назначьте часовые пояса для всех штатов только с одним часовым поясом (для большинства штатов)
а потом либо
2a) используйте решение js ( Javascript / PHP и часовые пояса ) для остальных состояний
или же
2b) используйте базу данных, подобную той, на которую ссылается @Doug выше.
Таким образом, вы можете найти tz дешево (и очень точно!) Для большинства ваших пользователей, а затем использовать один из других, более дорогих методов, чтобы получить его для остальных штатов.
Не очень элегантно, но мне показалось лучше, чем использовать js или базу данных для каждого пользователя.
источник
В дополнение к ответу Дуга Кавендека. Чтобы приблизиться к tz_database, можно использовать следующий подход.
PS Не могу вставить все ссылки :( Так что воспользуйтесь поиском.
источник
Это загрузит файл yaml, который сопоставит все часовые пояса с массивом их почтовых индексов:
например
Если вы предпочитаете сокращенные часовые пояса, вы можете запустить этот:
например
источник
См. Эти ссылки для базы данных Olson:
ftp
)http://www.twinsun.com/tz/tz-link.htmftp://elsie.nci.nih.gov/pub/источник
Также обратите внимание, что если вы используете службу геокодирования Yahoo, вы можете вернуть вам информацию о часовом поясе, установив правильный флаг.
http://developer.yahoo.com/geo/placefinder/guide/requests.html#flags-parameter
источник
Для этого есть отличный API Google. Он принимает местоположение и возвращает часовой пояс для этого местоположения. Должно быть достаточно просто, чтобы создать сценарий bash или python для получения результатов для каждого адреса в файле CSV или базе данных, а затем сохранить информацию о часовом поясе.
https://developers.google.com/maps/documentation/timezone/start
Конечная точка запроса:
Отклик:
источник