Получить часовой пояс по странам и регионам

Я разрабатываю рассылку новостей на платформе С#/. NET. Недавно я добавил модуль для получения страны и региона получателя по его IP-адресу с использованием базы данных maxmind.com.

Например, я могу получить следующую информацию для некоторого примерного IP-адреса:

Country Code: DE
Country Name: Germany   
Region Name:  Hessen 
City:         Frankfurt Am Main
Latitude:     50.1167
Longitude:    8.6833 

Теперь мне нужно получить часовую зону пользователя, используя эту информацию.

Я знаю, что есть некоторые базы данных GeoIp, которые также предоставляют часовой пояс, но мне нужно использовать эту конкретную базу данных GeoIp. Также нельзя использовать javascript-подход для определения смещения по времени.

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

Ответ 1

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

Я обнаружил, что база данных maxmind предоставляет файл сопоставления между регионами и часовыми поясами из базы данных Olsen (aka tz database): http://www.maxmind.com/timezone.txt

Вторым шагом было преобразование часовых поясов Olsen в часовых поясах .NET. Лучшее подходящее решение было найдено здесь: http://www.timdavis.com.au/data/olson-time-zone-database-to-standard-windows-time-zone-v01/ Поэтому я немного отредактировал его и преобразовал его в CSV файл, чтобы прочитать его с .NET.

Надеюсь, это поможет кому-то.

Ответ 3

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

Когда вы используете объект DatabaseReader из maxmind API, в нем уже есть атрибут location.timeZone, вы можете получить его из объекта, возвращаемого классом GeoIP, проверить API docs от maxmind.