2011-11-02 36 views
9

Estoy desarrollando una aplicación de envío de boletines en la plataforma C# /. NET. Recientemente agregué el módulo para recuperar el país y la región de un destinatario mediante su dirección IP utilizando la base de datos maxmind.com.Obtener zona horaria por país y región

Por ejemplo, se puede obtener la siguiente información por alguna dirección IP de la muestra:

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

Lo que necesito ahora es conseguir que la zona horaria del usuario utilizando esta información.

Sé que hay algunas bases de datos GeoIp que también proporcionan la zona horaria, pero necesito usar esta base de datos concreta GeoIp. Además, el enfoque de javascript para determinar el desfase temporal no se puede usar aquí.

¿Puedo obtener de alguna manera la zona horaria usando el nombre del país y la región?

+0

Puede usar lat/lon con cualquiera de [estos enfoques] (http://stackoverflow.com/a/16086964/634824) –

Respuesta

9

Finalmente, después de una investigación larga, he encontrado la solución. Puede que no sea muy preciso, pero no requiere la dependencia del servicio remoto.

me he dado cuenta que la base de datos de MaxMind proporciona archivo de correlación entre las regiones y zonas horarias de la base de datos Olsen (base de datos de alias tz): http://www.maxmind.com/timezone.txt

El segundo paso fue convertir zonas horarias Olsen en zonas horarias .NET. La mejor solución adecuada fue encontrada aquí: http://www.timdavis.com.au/data/olson-time-zone-database-to-standard-windows-time-zone-v01/ Así que la he editado un poco y la he convertido a un archivo CSV para leerla desde .NET.

Espero que ayude a alguien.

+1

Recuerde aceptar su respuesta, ya que es [correcto responder su propia pregunta] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) –

2
+0

Gracias. Servicio interesante. Trataré de buscar un enfoque basado en fuera de línea ya que podemos tener más destinatarios de 1M en el futuro, pero esta solución es muy útil en mi situación – VirusX

+0

@ VirusX - Si hablas de millones de solicitudes, será difícil encontrarlas. un servicio gratuito. Por supuesto, Javascript sería gratuito, de muchas maneras podría hacerlo, incluyendo simplemente el uso de una solicitud http a una página con la página de Javascript bajo su control. –

+0

@Ramhound - Como mencioné anteriormente, javascript no se puede usar aquí debido a la naturaleza de la solicitud. La URL de baliza se incluye en el parámetro 'src' de la etiqueta' img'. Cuando el usuario abre un mensaje de correo electrónico, la solicitud va a nuestro servicio. Todo lo que tenemos son encabezados http y dirección IP del destinatario. Alrededor de millones: en general, no significa millones de solicitudes por minuto u hora, pero definitivamente puede haber más de pocas solicitudes por segundo. Entonces, como dije, estoy tratando de encontrar alguna base de datos fuera de línea para hacer eso. – VirusX

1

Ha sido un tiempo desde que se hizo esta pregunta, pero podría ayudar a los demás ..

Cuando está utilizando un objeto DatabaseReader de API MaxMind en que ya tiene un atributo location.timeZone puede recuperarla desde el objeto devuelto por Clase GeoIP, echa un vistazo en API docs desde maxmind.

+0

Sí, en 2011 GeoIP2 no existía. Ahora hay una API simple para eso. – VirusX

Cuestiones relacionadas