Kiedy użytkownicy rejestrują się w naszej aplikacji, jesteśmy w stanie określić ich kod pocztowy, porównując go z krajową bazą danych. Jaki byłby najlepszy sposób określenia dobrego potencjalnego zgadywania ich strefy czasowej na podstawie tego kodu pocztowego?
Staramy się zminimalizować ilość danych, o które wyraźnie musimy ich prosić. Będą mogli ręcznie ustawić strefę czasową później, jeśli nasze najlepsze przypuszczenie się nie powiedzie. Zdaję sobie sprawę, że kody pocztowe nie pomogą w ustaleniu strefy czasowej poza Stanami Zjednoczonymi, ale w takim przypadku i tak musielibyśmy ręcznie zapytać, a mimo to mamy do czynienia głównie z USA.
Znalazłem wiele baz danych z kodami pocztowymi i jak dotąd tylko kilka zawiera informacje o strefach czasowych, ale te, które je zawierają, nie są darmowe, takie jak ta . Jeśli absolutnie konieczne jest wykupienie abonamentu na usługę, aby to zrobić, to nie będzie tego warte i będziemy musieli tylko wyraźnie zapytać użytkowników.
Chociaż język nie jest szczególnie istotny, ponieważ prawdopodobnie mogę konwertować rzeczy, które są potrzebne, używamy PHP i MySQL.
Odpowiedzi:
Właśnie znalazłem darmową bazę danych zip, która zawiera przesunięcie czasu i udział w DST. Podoba mi się odpowiedź Erika J., ponieważ pomogłaby mi wybrać rzeczywistą strefę czasową, a nie tylko przesunięcie (ponieważ nigdy nie można być całkowicie pewnym reguł), ale myślę, że mogę zacząć od tego i poprosić o znajdź najlepsze dopasowanie strefy czasowej na podstawie konfiguracji przesunięcia / czasu letniego. Myślę, że mogę spróbować skonfigurować prostą wersję odpowiedzi Development 4.0, aby sprawdzić, co otrzymuję z informacji zip jako test poczytalności. To zdecydowanie nie jest tak proste, jak bym miał nadzieję, ale połączenie powinno dać mi przynajmniej 90% pewności co do strefy czasowej użytkownika.
źródło
Większość stanów znajduje się dokładnie w jednej strefie czasowej (choć jest kilka wyjątków). Większość kodów pocztowych nie przekracza granic państwowych (choć jest kilka wyjątków).
Możesz szybko stworzyć własną listę stref czasowych według kodu pocztowego, łącząc te fakty.
Oto lista zakresów kodów pocztowych według stanu i lista stanów według strefy czasowej .
Możesz zobaczyć granice kodów pocztowych i porównać je z mapą stref czasowych za pomocą tego linku lub Google Earth, aby zamapować suwaki na strefy czasowe dla stanów podzielonych linią strefy czasowej.
Większość krajów spoza USA, z którymi masz do czynienia, znajduje się prawdopodobnie w dokładnie jednej strefie czasowej (znowu są wyjątki). W zależności od potrzeb możesz sprawdzić, skąd pochodzą Twoi najliczniejsi użytkownicy spoza USA i po prostu sprawdzić ich strefę czasową.
źródło
Utworzyłem tabelę bazy danych MySQL typu Open Source (na licencji MIT), która zawiera odniesienia do kodów pocztowych i stref czasowych i przesłałem ją na sourceforge.net:
http://sourceforge.net/projects/zip2timezone/files/
Pochodzi z czterech lokalizacji (podstawowy interfejs API Yahoo PlaceFinder - dzięki @Chris N)
Więcej informacji i instrukcji zawiera plik README.
źródło
Jeśli chcesz, możesz również poczuć strefę czasową, prosząc przeglądarkę Josh Fraser o fajny opis tutaj
Drugą rzeczą, którą musisz wiedzieć, jest to, czy w danej lokalizacji przestrzega się czasu letniego (DST), czy nie. Ponieważ latem zawsze obserwuje się czas letni, możemy porównać przesunięcie czasu między dwiema datami w styczniu, z przesunięciem czasowym między dwiema datami w czerwcu. Jeśli przesunięcia są różne, wiemy, że w danej lokalizacji jest przestrzegany czas letni. Jeśli przesunięcia są takie same, wiemy, że w miejscu nie przestrzega się czasu letniego.
Wszystko to zasługa Josha Frasera.
Może to pomóc w przypadku klientów spoza Stanów Zjednoczonych i może uzupełniać Twoje podejście do zip.
Oto pytania SO, które dotyczą pobierania strefy czasowej z javascript
źródło
Google ma do tego specjalny interfejs API: https://developers.google.com/maps/documentation/timezone/
np .: https://maps.googleapis.com/maps/api/timezone/json?location=40.704822,-74.0137431×tamp=0
Wymagają uniksowego znacznika czasu w kwerendzie. Z zwróconej odpowiedzi wynika, że
timeZoneName
uwzględnia ona czas letni na podstawie sygnatury czasowej, atimeZoneId
jest niezależną od czasu letniego nazwą strefy czasowej.Na mój użytek, w Pythonie, po prostu przekazuję
timestamp=0
i używamtimeZoneId
wartości, aby uzyskaćtz_info
obiekt z pytz , mogę następnie użyć tego do zlokalizowania dowolnej konkretnej daty i godziny w moim własnym kodzie.Uważam, że podobnie dla PHP można znaleźć "America / New_York" w http://pecl.php.net/package/timezonedb
źródło
Klejnot Ruby do konwersji kodu pocztowego na strefę czasową: https://github.com/Katlean/TZip (rozwidlony z https://github.com/farski/TZip ).
Jest szybki, mały i nie ma żadnych zewnętrznych zależności, ale pamiętaj, że kody pocztowe po prostu nie są idealnie mapowane do stref czasowych.
źródło
Pracowałem nad tym problemem dla własnej witryny i czuję, że znalazłem całkiem dobre rozwiązanie
1) Przypisz strefy czasowe do wszystkich stanów z tylko jedną strefą czasową (większość stanów)
a potem albo
2a) użyj rozwiązania js ( Javascript / PHP i strefy czasowe ) dla pozostałych stanów
lub
2b) użyj bazy danych, takiej jak ta, do której link znajduje się powyżej @Doug.
W ten sposób możesz znaleźć tz tanio (i bardzo dokładnie!) Dla większości użytkowników, a następnie użyć jednej z innych, droższych metod, aby uzyskać go dla pozostałych stanów.
Niezbyt eleganckie, ale wydawało mi się lepsze niż używanie js lub bazy danych dla każdego użytkownika.
źródło
Oprócz odpowiedzi Douga Kavendeka. Aby zbliżyć się do tz_database, można zastosować następujące podejście.
PS Nie mogę wstawić wszystkich linków :( Więc użyj wyszukiwania.
źródło
Spowoduje to pobranie pliku yaml, który zamapuje wszystkie strefy czasowe na tablicę ich kodów pocztowych:
na przykład
Jeśli wolisz skrócone strefy czasowe, możesz uruchomić tę:
na przykład
źródło
Zobacz te linki do bazy danych Olson:
ftp
)http://www.twinsun.com/tz/tz-link.htmftp://elsie.nci.nih.gov/pub/źródło
Pamiętaj również, że jeśli korzystasz z usługi geokodowania Yahoo, możesz otrzymać informacje o strefie czasowej, ustawiając odpowiednią flagę.
http://developer.yahoo.com/geo/placefinder/guide/requests.html#flags-parameter
źródło
W rzeczywistości jest do tego świetny interfejs API Google. Pobiera lokalizację i zwraca strefę czasową dla tej lokalizacji. Powinno być wystarczająco proste, aby utworzyć skrypt bash lub python, aby uzyskać wyniki dla każdego adresu w pliku CSV lub bazie danych, a następnie zapisać informacje o strefie czasowej.
https://developers.google.com/maps/documentation/timezone/start
Punkt końcowy żądania:
Odpowiedź:
źródło