2008-11-04 2 views
49

У меня есть список городов, штатов/провинций и стран, и мне нужно легко найти их соответствующие временные зоны. В частности, мне нужно знать, к какой Windows TimeZone они относятся. До сих пор это был сложный процесс, потому что нет простого способа передать город чему-то и вернуть часовой пояс (временной промежуток является смещением и зависит от того, поддерживает ли часовой пояс Летнее время).Мне нужен картографический список городов для часовых поясов - лучший способ получить его?

Текущий поток должен использовать http://www.batchgeocode.com, чтобы получить широту/долготу города (который действительно вызывает услугу Yahoo), а затем звоните http://www.EarthTools.org, чтобы получить письмо с часовым поясом, которое соответствует смещению. Проблема в том, что служба yahoo иногда возвращает плохую долготу/широту, а earthtools.org не знает много о DST-информации, поэтому сопоставление с правильным идентификатором TimeZone является утомительным ручным процессом.

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

Спасибо.

+0

Не могли бы вы объяснить, в чем проблема с Lat/Lon? – wonderchook 2008-11-04 16:42:09

ответ

36

Интересный вопрос! Эти другие три должности СО (41504, 55901 и 237023) упоминают пару потенциальных клиентов. Там есть Olson database (см. Описание Wikipedia entry), но он выглядит более алгоритмическим/программным (например, если вы знаете имя графства, для некоторых стран есть правило для).

Я попытался посмотреть на EarthTools, но он failed для St.Pierre/Miquelon, один из хороших тестовых случаев (-3: 00, а не -3: 30 для близлежащего Ньюфаундленда, что говорит EarthTools).

Некоторые перспективные варианты: worldtimeengine.com имеет бесплатную интерактивную версию и API, который выглядит недорогим (5000 запросов на британский фунт), но API охватывает только латы, длинные запросы как входные данные (а не местоположение как вход, что-то интерактивная версия).

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

p.s. вот некоторые хорошие тестовые случаи (от worldtimezone.com и Wikipedia's list of timezones, то map of time zones также иллюстративный):

  • Каракас, Венесуэла (-4: 30)
  • Гусак, Ньюфаундленда (-3: 30)
  • Тегеран Иран (+3: 30)
  • Кабул, Афганистан (+4: 30)
  • Катманду, Непал (+5: 45)
  • Янгон, Мьянма (+6: 30)
  • Ch атам-острова, Новая Зеландия (+12: 45)
  • Остров Пасхи (-6)
  • St.Пьер и Микелон (-3)
  • Стэнли, Фолклендские острова (-4)
  • Эвансвилл, Индиана (-6 = Центральный)
  • Онтарио, штат Орегон (-7 = гора)
+19

geonames.org предоставляет дамп данных (по странам) всех известных городов и их часовой пояс Olson. Руки вниз лучший способ сделать это. http://download.geonames.org/export/dump/ – 2012-04-10 18:07:24

+0

См. также [эта запись в вики сообщества] (http://stackoverflow.com/q/16086962/634824) – 2013-04-18 16:25:01

+0

@skylarsutton прикомандировано. Достаточно просто загрузить данные geonames в таблицу SQL и нарезать ее любым способом. – 2014-06-24 16:36:04

0

я могу помогите со второй частью вашего текущего рабочего процесса. Я написал библиотеку Java, которая отображает lat/long в timezones, где база данных закодирована в исходном коде.

Исходный код в основном представляет собой огромное дерево операторов if: if (lat> = -33.0) if (lng < -151.5) ... еще ... и так далее. Это всего лишь один класс. Поэтому, если вы используете C#, было бы тривиально его переносить.

http://www.edval.biz/mapping-lat-lng-s-to-timezones

Это с точностью до 22км.

1

Мы используем .NET C# MVC и нам нужен список Windows, Timezone для каждой страны.

Так что для каждого регистрирующего пользователя мы можем установить часовой пояс автоматически.

Большинство онлайн-баз данных предоставляют IANA часовые пояса и трудно сопоставить данные с конкретной страной.

Используя NodaTime, нам удалось создать Json, в котором перечислены следующие записи.

CountryName 
2LetterIsoCountryCode 
3LetterIsoCountryCode 
IANATimezones 
WindowsTimezones 

Вы можете скачать сгенерированный JSON here.

2

moment-timezone - это библиотека JavaScript для расчета часового пояса.

Все данные о времени, связывающие страны, временные интервалы и смещения, все available in json format.