92 votes

Mappage du code postal américain sur le fuseau horaire

Lorsque vous vous inscrivez à notre application, nous sommes en mesure de déduire de leur code postal, lorsque nous les valider par rapport à une base de données nationale. Quelle serait la meilleure façon de déterminer un bon potentiel de deviner de leur temps à la zone à partir de ce code postal?

Nous essayons de minimiser la quantité de données que nous ont explicitement de leur demander. Ils seront en mesure de régler manuellement le fuseau horaire, plus tard, si notre conjecture est fausse. Je me rends compte codes postaux ne va pas aider à déterminer le fuseau horaire à l'extérieur des usa, mais dans ce cas, nous aurions du demander manuellement de toute façon, et nous traitons principalement avec les états-unis, peu importe.

J'ai trouvé beaucoup de code postal bases de données, et jusqu'à présent, seuls quelques-uns contiennent des informations de fuseau horaire, mais ceux qui ne sont pas libres, comme cette une. Si c'est absolument nécessaire de payer un abonnement à un service afin de faire cela, alors il ne sera pas la peine et nous n'aurons qu'à demander aux utilisateurs de manière explicite.

Bien que la langue n'est pas particulièrement pertinent comme je peux probablement convertir mais les choses nécessaires, nous sommes à l'aide de PHP et MySQL.

33voto

Doug Kavendek Points 1244

Je viens de trouver un zip gratuit de la base de données qui comprend le décalage de l'heure et de la participation de l'heure d'été. Je n'aime Erik J, en réponse, qu'il allait m'aider à choisir la durée réelle de la zone, contrairement à l'offset (parce que vous ne pouvez jamais être complètement sûr sur les règles), mais je pense que je pourrais commencer par cela, et essayer de trouver le meilleur temps de la zone de correspondance basée sur offset/configuration de l'heure d'été. Je pense que je peut essayer de mettre en place une simple version de Développement 4.0 est la réponse de contre-vérifier ce que je reçois de la zip info comme la santé mentale de test. Ce n'est certainement pas aussi simple que je l'avais de l'espoir, mais une combinaison devrait me faire au moins 90% sûr de l'utilisateur de la zone de temps.

30voto

Eric J. Points 73338

La plupart des états sont dans un seul fuseau horaire (bien qu'il existe quelques exceptions). La plupart des codes postaux ne traversent pas les frontières de l'etat (bien qu'il existe quelques exceptions).

Vous pourrait rapidement venir avec votre propre liste de fuseaux horaires par zip en combinant ces faits.

Voici une liste des code postal plages par l'état, et une liste de membres par fuseau horaire.

Vous pouvez voir les limites de codes postaux et de comparer le fuseau horaire carte à l'aide de ce lien, ou Google Earth, carte de zips sur des fuseaux horaires de l'états qui sont séparées par une zone de temps de ligne de.

La majorité des non-US pays concerné sont probablement dans un seul fuseau horaire. Vous voudrez peut-être vérifier où votre top-N non-US visiteurs et simplement recherche de leur fuseau horaire.

16voto

chriv Points 124

J'ai créé une table de base de données MySQL Open-Source (sous licence MIT) qui référence des codes postaux et des fuseaux horaires, puis je l'ai téléchargée sur sourceforge.net:

http://sourceforge.net/projects/zip2timezone/files/

Il provient de quatre emplacements (API principale de Yahoo PlaceFinder - merci @Chris N)

Voir le fichier LISEZMOI pour plus d'informations et d'instructions.

9voto

Development 4.0 Points 1232

Si vous le souhaitez, vous pouvez également obtenir une sensation pour le fuseau horaire en demandant le navigateur Josh Fraser a une belle écriture sur elle ici

var rightNow = new Date();
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toGMTString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);

La deuxième chose que vous devez savoir, c'est si l'emplacement observe l'heure d'été (DST) ou pas. Depuis l'heure d'été est toujours observée au cours de l'été, on peut comparer le décalage de temps entre deux dates en janvier, pour le décalage de temps entre deux dates en juin. Si les décalages sont différents, alors nous savons que l'endroit observe l'heure d'été. Si les décalages sont les mêmes, alors nous savons que l'endroit N'observe PAS l'heure d'été.

var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
temp = june1.toGMTString();
var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var daylight_time_offset = (june1 - june2) / (1000 * 60 * 60);
var dst;
if (std_time_offset == daylight_time_offset) {
    dst = "0"; // daylight savings time is NOT observed
} else {
    dst = "1"; // daylight savings time is observed
}

Tout le crédit en revient à Josh Fraser.

Cela pourrait vous aider avec les clients en dehors des états-unis, et il pourrait compléter votre zip approche.

Voici une SORTE de répondre à des questions sur l'obtention d'un fuseau horaire à partir de javascript

4voto

mkirk Points 920

Ruby gem pour convertir le code postal en fuseau horaire: https://github.com/Katlean/TZip (créé à partir de https://github.com/farski/TZip ).

 > ActiveSupport::TimeZone.find_by_zipcode('90029')
 => "Pacific Time (US & Canada)"
 

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X