Lorsque les utilisateurs s'inscrivent avec notre application, nous pouvons déduire leur code postal lorsque nous les validons par rapport à une base de données nationale. Quelle serait la meilleure façon de déterminer une bonne estimation potentielle de leur fuseau horaire à partir de ce code postal?
Nous essayons de minimiser la quantité de données que nous devons leur demander explicitement. Ils pourront définir manuellement le fuseau horaire plus tard si notre meilleure estimation est erronée. Je me rends compte que les codes postaux n'aideront pas à déterminer le fuseau horaire en dehors des États-Unis, mais dans ce cas, nous devrons quand même demander manuellement, et nous traitons principalement avec les États-Unis.
J'ai trouvé beaucoup de bases de données de codes postaux, et jusqu'à présent, seules quelques-unes contiennent des informations sur le fuseau horaire, mais celles qui ne le sont pas ne sont pas gratuites, comme celle-ci . S'il est absolument nécessaire de payer un abonnement à un service pour ce faire, cela n'en vaudra pas la peine et nous devrons simplement demander explicitement aux utilisateurs.
Bien que le langage ne soit pas particulièrement pertinent car je peux probablement convertir les choses si nécessaire, nous utilisons PHP et MySQL.
Réponses:
Je viens de trouver une base de données zip gratuite qui comprend le décalage horaire et la participation à l'heure d'été. J'aime la réponse d'Erik J, car cela m'aiderait à choisir le fuseau horaire réel plutôt que le décalage (parce que vous ne pouvez jamais être complètement sûr des règles), mais je pense que je pourrais commencer par ceci et essayer de trouver la meilleure correspondance de fuseau horaire en fonction de la configuration offset / dst. Je pense que je pourrais essayer de mettre en place une version simple de la réponse de Development 4.0 pour vérifier ce que j'obtiens des informations zip comme test de cohérence. Ce n'est certainement pas aussi simple que je l'espère, mais une combinaison devrait me donner au moins 90% de certitude sur le fuseau horaire d'un utilisateur.
la source
La plupart des états sont dans exactement un fuseau horaire (bien qu'il y ait quelques exceptions). La plupart des codes postaux ne traversent pas les frontières des États (bien qu'il y ait quelques exceptions).
Vous pouvez rapidement créer votre propre liste de fuseaux horaires par zip en combinant ces faits.
Voici une liste des plages de codes postaux par état et une liste d' états par fuseau horaire .
Vous pouvez voir les limites des codes postaux et les comparer à la carte des fuseaux horaires en utilisant ce lien , ou Google Earth, pour mapper les zips aux fuseaux horaires pour les États qui sont divisés par une ligne de fuseau horaire.
La majorité des pays non américains avec lesquels vous traitez se trouvent probablement dans exactement un fuseau horaire (encore une fois, il y a des exceptions). En fonction de vos besoins, vous voudrez peut-être regarder d'où viennent vos principaux visiteurs non américains et rechercher simplement leur fuseau horaire.
la source
J'ai créé une table de base de données MySQL Open-Source (sous licence MIT) qui fait des références croisées entre les codes postaux et les fuseaux horaires et l'ai téléchargée sur sourceforge.net:
http://sourceforge.net/projects/zip2timezone/files/
Il provient de quatre emplacements (API Yahoo PlaceFinder principale - merci @Chris N)
Consultez le fichier README pour plus d'informations et d'instructions.
la source
Si vous le souhaitez, vous pouvez également avoir une idée du fuseau horaire en demandant au navigateur Josh Fraser d'avoir une belle rédaction ici
La deuxième chose que vous devez savoir est de savoir si l'emplacement observe l'heure d'été (DST) ou non. Étant donné que l'heure d'été est toujours observée pendant l'été, nous pouvons comparer le décalage horaire entre deux dates en janvier, au décalage horaire entre deux dates en juin. Si les décalages sont différents, alors nous savons que l'emplacement observe l'heure d'été. Si les décalages sont les mêmes, alors nous savons que l'emplacement N'observe PAS DST.
Tout le mérite revient à Josh Fraser.
Cela peut vous aider avec les clients en dehors des États-Unis et compléter votre approche zip.
Voici quelques questions SO qui concernent l'obtention du fuseau horaire à partir de javascript
la source
Google a une API spécifique pour cela: https://developers.google.com/maps/documentation/timezone/
par exemple: https://maps.googleapis.com/maps/api/timezone/json?location=40.704822,-74.0137431×tamp=0
Ils nécessitent un horodatage unix sur la chaîne de requête. À partir de la réponse renvoyée, il semble qu'il
timeZoneName
prenne en compte l'heure d'été, en fonction de l'horodatage, tandistimeZoneId
que le nom du fuseau horaire est indépendant de l'heure d'été.Pour mon utilisation, en Python, je ne fais que passer
timestamp=0
et utiliser latimeZoneId
valeur pour obtenir untz_info
objet de pytz , je peux ensuite l'utiliser pour localiser une date / heure particulière dans mon propre code.Je crois que pour PHP de la même manière, vous pouvez trouver "America / New_York" dans http://pecl.php.net/package/timezonedb
la source
Ruby gem pour convertir le code postal en fuseau horaire: https://github.com/Katlean/TZip (dérivé de https://github.com/farski/TZip ).
C'est rapide, petit et n'a pas de dépendances externes, mais gardez à l'esprit que les codes postaux ne correspondent pas parfaitement aux fuseaux horaires.
la source
J'ai travaillé sur ce problème pour mon propre site et j'ai l'impression d'avoir trouvé une très bonne solution
1) Attribuez des fuseaux horaires à tous les états avec un seul fuseau horaire (la plupart des états)
et puis soit
2a) utiliser la solution js ( Javascript / PHP et fuseaux horaires ) pour les états restants
ou
2b) utiliser une base de données comme celle liée ci-dessus par @Doug.
De cette façon, vous pouvez trouver tz à un prix avantageux (et très précisément!) Pour la majorité de vos utilisateurs, puis utiliser l'une des autres méthodes plus coûteuses pour l'obtenir pour le reste des États.
Pas super élégant, mais me semblait mieux que d'utiliser js ou une base de données pour chaque utilisateur.
la source
En plus de la réponse de Doug Kavendek. On pourrait utiliser l'approche suivante pour se rapprocher de tz_database.
PS Impossible d'insérer tous les liens: (Veuillez donc utiliser la recherche.
la source
Cela téléchargera un fichier yaml qui mappera tous les fuseaux horaires à un tableau de leurs codes postaux:
par exemple
Si vous préférez les fuseaux horaires raccourcis, vous pouvez exécuter celui-ci:
par exemple
la source
Voir ces liens pour la base de données Olson:
ftp
)http://www.twinsun.com/tz/tz-link.htmftp://elsie.nci.nih.gov/pub/la source
Notez également que si vous utilisez le service de géocodage Yahoo, vous pouvez obtenir des informations sur le fuseau horaire en définissant le bon indicateur.
http://developer.yahoo.com/geo/placefinder/guide/requests.html#flags-parameter
la source
Il existe en fait une excellente API Google pour cela. Il prend un emplacement et renvoie le fuseau horaire de cet emplacement. Devrait être assez simple pour créer un script bash ou python pour obtenir les résultats pour chaque adresse dans un fichier CSV ou une base de données, puis enregistrer les informations de fuseau horaire.
https://developers.google.com/maps/documentation/timezone/start
Demande de point de terminaison:
Réponse:
la source