Cuando los usuarios se registran en nuestra aplicación, podemos inferir su código postal cuando los validamos con una base de datos nacional. ¿Cuál sería la mejor manera de determinar una buena suposición potencial de su zona horaria a partir de este código postal?
Estamos tratando de minimizar la cantidad de datos que explícitamente tenemos que pedirles. Podrán configurar manualmente la zona horaria más tarde si nuestra mejor suposición es incorrecta. Me doy cuenta de que los códigos postales no ayudarán a determinar la zona horaria fuera de los EE. UU., Pero en ese caso tendríamos que preguntar manualmente de todos modos, y tratamos predominantemente con los EE. UU. Independientemente.
Encontré muchas bases de datos de códigos postales y, hasta ahora, solo algunas contienen información sobre la zona horaria, pero las que la tienen no son gratuitas, como esta . Si es absolutamente necesario pagar una suscripción a un servicio para hacer esto, entonces no valdrá la pena y solo tendremos que preguntar a los usuarios explícitamente.
Aunque el lenguaje no es particularmente relevante ya que probablemente puedo convertir cosas sin importar lo que sea necesario, estamos usando PHP y MySQL.
Respuestas:
Acabo de encontrar una base de datos zip gratuita que incluye compensación de tiempo y participación en DST. Me gusta la respuesta de Erik J, ya que me ayudaría a elegir la zona horaria real en lugar de solo el desplazamiento (porque nunca puedes estar completamente seguro de las reglas), pero creo que podría comenzar con esto e intentarlo encuentre la mejor coincidencia de zona horaria según la configuración de desplazamiento / dst. Creo que puedo intentar configurar una versión simple de la respuesta de Development 4.0 para verificar lo que obtengo de la información del zip como una prueba de cordura. Definitivamente no es tan simple como esperaba, pero una combinación debería darme al menos un 90% seguro de la zona horaria de un usuario.
fuente
La mayoría de los estados se encuentran exactamente en una zona horaria (aunque hay algunas excepciones). La mayoría de los códigos postales no cruzan las fronteras estatales (aunque hay algunas excepciones).
Puede crear rápidamente su propia lista de zonas horarias por código postal combinando esos datos.
Aquí hay una lista de rangos de códigos postales por estado y una lista de estados por zona horaria .
Puede ver los límites de los códigos postales y compararlos con el mapa de la zona horaria utilizando este enlace , o Google Earth, para asignar las cremalleras a las zonas horarias de los estados que están divididos por una línea de zona horaria.
La mayoría de los países que no son de EE. UU. Con los que está tratando probablemente se encuentren exactamente en una zona horaria (nuevamente, hay excepciones). Dependiendo de sus necesidades, es posible que desee ver de dónde provienen sus N visitantes principales que no son de EE. UU. Y simplemente buscar su zona horaria.
fuente
Creé una tabla de base de datos MySQL de código abierto (con licencia MIT) que hace referencias cruzadas de códigos postales y zonas horarias y la cargué en sourceforge.net:
http://sourceforge.net/projects/zip2timezone/files/
Se obtiene de cuatro ubicaciones (API principal de Yahoo PlaceFinder, gracias @Chris N)
Consulte el archivo README para obtener más información e instrucciones.
fuente
Si lo desea, también puede tener una idea de la zona horaria preguntando al navegador Josh Fraser tiene un buen comentario aquí.
La segunda cosa que necesita saber es si la ubicación observa el horario de verano (DST) o no. Dado que el horario de verano siempre se observa durante el verano, podemos comparar la diferencia horaria entre dos fechas en enero con la diferencia horaria entre dos fechas en junio. Si las compensaciones son diferentes, entonces sabemos que la ubicación cumple con el horario de verano. Si las compensaciones son las mismas, entonces sabemos que la ubicación NO cumple con el horario de verano.
Todo el mérito de esto es para Josh Fraser.
Esto podría ayudarlo con clientes fuera de los EE. UU. Y podría complementar su enfoque zip.
Aquí hay algunas preguntas SO relacionadas con la obtención de la zona horaria de javascript
fuente
Google tiene una API específica para esto: https://developers.google.com/maps/documentation/timezone/
por ejemplo: https://maps.googleapis.com/maps/api/timezone/json?location=40.704822,-74.0137431×tamp=0
Requieren una marca de tiempo Unix en la cadena de consulta. De la respuesta devuelta, parece que
timeZoneName
tiene en cuenta el horario de verano, según la marca de tiempo, mientras quetimeZoneId
es un nombre independiente de DST para la zona horaria.Para mi uso, en Python, solo estoy pasando
timestamp=0
y usando eltimeZoneId
valor para obtener untz_info
objeto de pytz , luego puedo usarlo para localizar cualquier fecha y hora en particular en mi propio código.Creo que para PHP de manera similar puedes encontrar "America / New_York" en http://pecl.php.net/package/timezonedb
fuente
Ruby gem para convertir el código postal a la zona horaria: https://github.com/Katlean/TZip (bifurcado de https://github.com/farski/TZip ).
Es rápido, pequeño y no tiene dependencias externas, pero tenga en cuenta que los códigos postales no se asignan perfectamente a las zonas horarias.
fuente
He estado trabajando en este problema para mi propio sitio y siento que he encontrado una solución bastante buena.
1) Asignar zonas horarias a todos los estados con solo una zona horaria (la mayoría de los estados)
y luego o
2a) use la solución js ( Javascript / PHP y zonas horarias ) para los estados restantes
o
2b) use una base de datos como la que @Doug enlazó anteriormente.
De esta manera, puede encontrar tz de manera económica (¡y con mucha precisión!) Para la mayoría de sus usuarios y luego usar uno de los otros métodos más costosos para obtenerlo para el resto de los estados.
No es súper elegante, pero me pareció mejor que usar js o una base de datos para todos y cada uno de los usuarios.
fuente
Además de la respuesta de Doug Kavendek. Se podría usar el siguiente enfoque para acercarse a tz_database.
PD: No se pueden insertar todos los enlaces :( Por lo tanto, utilice la búsqueda.
fuente
Esto descargará un archivo yaml que mapeará todas las zonas horarias a una matriz de sus códigos postales:
p.ej
Si prefiere las zonas horarias acortadas, puede ejecutar esta:
p.ej
fuente
Vea estos enlaces para la base de datos de Olson:
ftp
)http://www.twinsun.com/tz/tz-link.htmftp://elsie.nci.nih.gov/pub/fuente
También tenga en cuenta que si está utilizando el servicio de codificación geográfica de Yahoo, puede obtener información sobre la zona horaria configurando la marca correcta.
http://developer.yahoo.com/geo/placefinder/guide/requests.html#flags-parameter
fuente
De hecho, existe una gran API de Google para esto. Toma una ubicación y devuelve la zona horaria de esa ubicación. Debería ser lo suficientemente simple como para crear un script bash o python para obtener los resultados de cada dirección en un archivo CSV o base de datos y luego guardar la información de la zona horaria.
https://developers.google.com/maps/documentation/timezone/start
Solicitar punto final:
Respuesta:
fuente