Wenn sich Benutzer bei unserer App registrieren, können wir ihre Postleitzahl ableiten, wenn wir sie anhand einer nationalen Datenbank validieren. Was wäre der beste Weg, um anhand dieser Postleitzahl eine gute potenzielle Schätzung ihrer Zeitzone zu ermitteln?
Wir versuchen, die Datenmenge zu minimieren, nach der wir sie explizit fragen müssen. Sie können die Zeitzone später manuell einstellen, wenn unsere beste Vermutung falsch ist. Mir ist klar, dass Postleitzahlen nicht dazu beitragen, die Zeitzone außerhalb der USA herauszufinden, aber in diesem Fall müssten wir trotzdem manuell nachfragen, und wir beschäftigen uns unabhängig davon überwiegend mit den USA.
Ich habe viele Postleitzahlendatenbanken gefunden, und bisher enthalten nur wenige Zeitzoneninformationen, aber diejenigen, die nicht kostenlos sind, wie diese . Wenn es dazu unbedingt erforderlich ist, ein Abonnement für einen Dienst zu bezahlen, lohnt es sich nicht und wir müssen die Benutzer nur explizit fragen.
Obwohl die Sprache nicht besonders relevant ist, da ich wahrscheinlich Dinge konvertieren kann, die benötigt werden, verwenden wir PHP und MySQL.
Antworten:
Ich habe gerade eine kostenlose Zip-Datenbank gefunden , die Zeitversatz und Teilnahme an der Sommerzeit enthält. Ich mag die Antwort von Erik J, da sie mir helfen würde, die tatsächliche Zeitzone und nicht nur den Versatz zu wählen (weil Sie sich bei den Regeln nie ganz sicher sein können), aber ich denke, ich könnte damit beginnen und es versuchen lassen Finden Sie die beste Zeitzonenübereinstimmung basierend auf der Offset / dst-Konfiguration. Ich denke, ich kann versuchen, eine einfache Version der Antwort von Development 4.0 einzurichten, um zu überprüfen, was ich aus den Zip-Informationen als Vernunfttest erhalte. Es ist definitiv nicht so einfach, wie ich es mir erhoffen würde, aber eine Kombination sollte mir mindestens 90% der Zeitzone eines Benutzers geben.
quelle
Die meisten Staaten liegen in genau einer Zeitzone (obwohl es einige Ausnahmen gibt). Die meisten Postleitzahlen überschreiten keine Staatsgrenzen (obwohl es einige Ausnahmen gibt).
Sie können schnell eine eigene Liste von Zeitzonen pro Postleitzahl erstellen, indem Sie diese Fakten kombinieren.
Hier ist eine Liste der Postleitzahlbereiche pro Bundesstaat und eine Liste der Bundesstaaten pro Zeitzone .
Über diesen Link oder Google Earth können Sie die Grenzen von Postleitzahlen anzeigen und mit der Zeitzonenkarte vergleichen , um Reißverschlüsse Zeitzonen für die Zustände zuzuordnen, die durch eine Zeitzonenlinie getrennt sind.
Die Mehrheit der Nicht-US-Länder, mit denen Sie zu tun haben, befindet sich wahrscheinlich in genau einer Zeitzone. Vielleicht möchten Sie sich ansehen, woher Ihre Top-N-Besucher außerhalb der USA kommen, und einfach ihre Zeitzone nachschlagen.
quelle
Ich habe eine Open-Source-MySQL-Datenbanktabelle (MIT-lizenziert) erstellt, die auf Postleitzahlen und Zeitzonen verweist, und sie auf sourceforge.net hochgeladen:
http://sourceforge.net/projects/zip2timezone/files/
Es wird von vier Standorten bezogen (primäre Yahoo PlaceFinder-API - danke @Chris N)
Weitere Informationen und Anweisungen finden Sie in der README-Datei.
quelle
Wenn Sie möchten, können Sie sich auch ein Bild von der Zeitzone machen, indem Sie den Browser fragen. Josh Fraser hat hier eine nette Beschreibung
Das zweite, was Sie wissen müssen, ist, ob der Standort die Sommerzeit (DST) einhält oder nicht. Da die Sommerzeit immer im Sommer eingehalten wird, können wir den Zeitversatz zwischen zwei Daten im Januar mit dem Zeitversatz zwischen zwei Daten im Juni vergleichen. Wenn die Offsets unterschiedlich sind, wissen wir, dass der Standort die Sommerzeit einhält. Wenn die Offsets gleich sind, wissen wir, dass der Ort die Sommerzeit NICHT beachtet.
Alle Ehre gebührt Josh Fraser.
Dies kann Ihnen bei Kunden außerhalb der USA helfen und Ihren Zip-Ansatz ergänzen.
Hier sind SO-Fragen, die sich mit dem Abrufen der Zeitzone aus Javascript befassen
quelle
Google hat hierfür eine spezielle API: https://developers.google.com/maps/documentation/timezone/
Beispiel: https://maps.googleapis.com/maps/api/timezone/json?location=40.704822,-74.0137431×tamp=0
Sie benötigen einen Unix-Zeitstempel auf dem Querystring. Aus der zurückgegebenen Antwort geht hervor, dass
timeZoneName
die Sommerzeit basierend auf dem Zeitstempel berücksichtigt wird, währendtimeZoneId
es sich um einen DST-unabhängigen Namen für die Zeitzone handelt.Für meine Verwendung in Python übergebe ich nur
timestamp=0
dentimeZoneId
Wert und verwende ihn , um eintz_info
Objekt von pytz abzurufen . Anschließend kann ich damit eine bestimmte Datums- und Uhrzeitangabe in meinem eigenen Code lokalisieren.Ich glaube, für PHP finden Sie "America / New_York" in ähnlicher Weise unter http://pecl.php.net/package/timezonedb
quelle
Ruby Gem zum Konvertieren der Postleitzahl in die Zeitzone: https://github.com/Katlean/TZip (gegabelt von https://github.com/farski/TZip ).
Es ist schnell, klein und hat keine externen Abhängigkeiten. Beachten Sie jedoch, dass Postleitzahlen nicht perfekt auf Zeitzonen abgebildet werden können.
quelle
Ich habe an diesem Problem für meine eigene Website gearbeitet und habe das Gefühl, eine ziemlich gute Lösung gefunden zu haben
1) Weisen Sie allen Zuständen mit nur einer Zeitzone Zeitzonen zu (die meisten Zustände).
und dann auch nicht
2a) Verwenden Sie die js-Lösung ( Javascript / PHP und Zeitzonen für die verbleibenden Zustände )
oder
2b) Verwenden Sie eine Datenbank wie die oben von @Doug verlinkte.
Auf diese Weise können Sie tz für die Mehrheit Ihrer Benutzer billig (und sehr genau!) Finden und dann eine der anderen, teureren Methoden verwenden, um es für den Rest der Staaten zu erhalten.
Nicht super elegant, aber mir schien es besser, als für jeden Benutzer js oder eine Datenbank zu verwenden.
quelle
Neben Doug Kavendek Antwort. Man könnte den folgenden Ansatz verwenden, um näher an tz_database heranzukommen.
PS Es können nicht alle Links eingefügt werden :( Bitte verwenden Sie die Suche.
quelle
Dadurch wird eine Yaml-Datei heruntergeladen, die alle Zeitzonen einem Array ihrer Postleitzahlen zuordnet:
z.B
Wenn Sie die verkürzten Zeitzonen bevorzugen, können Sie diese ausführen:
z.B
quelle
Siehe diese Links für die Olson-Datenbank:
ftp
)http://www.twinsun.com/tz/tz-link.htmftp://elsie.nci.nih.gov/pub/quelle
Beachten Sie auch, dass Sie, wenn Sie zufällig den Geokodierungsdienst von Yahoo verwenden, Zeitzoneninformationen zurückgeben können, indem Sie das richtige Flag setzen.
http://developer.yahoo.com/geo/placefinder/guide/requests.html#flags-parameter
quelle
Dafür gibt es tatsächlich eine großartige Google-API. Es nimmt einen Ort auf und gibt die Zeitzone für diesen Ort zurück. Sollte einfach genug sein, um ein Bash- oder Python-Skript zu erstellen, um die Ergebnisse für jede Adresse in einer CSV-Datei oder -Datenbank zu erhalten, und speichern Sie dann die Zeitzoneninformationen.
https://developers.google.com/maps/documentation/timezone/start
Endpunkt anfordern:
Antwort:
quelle