2013-10-04 11 views
22

Czy mimo to można określić, w której strefie czasowej/kraju znajduje się telefon? Wolałbym nie korzystać z usług lokalizacyjnych.Pobierz strefę czasową/kraj z iPhone'a

Ma to na celu automatyczne kierowanie połączeń. Jeśli użytkownik jest w USA, chcę, aby aplikacja domyślnie dzwoniła do amerykańskiego call center. Jeśli użytkownik jest w innym kraju, chcę, aby domyślny był jego call center.

Dzięki!

Odpowiedz

57

można uzyskać nazwę lokalnej strefy czasowej przy użyciu:

NSTimeZone *timeZone = [NSTimeZone localTimeZone]; 
NSString *tzName = [timeZone name]; 

nazwa będzie coś jak Australia/Sydney lub Europe/Zurich lub America/Denver. Ponieważ brzmi to tak, jakbyś troszczył się tylko o kontynent, może to być wszystko, czego potrzebujesz.

Jeśli potrzebujesz więcej: pobierz oficjalną bazę danych strefy czasowej pod numer http://www.iana.org/time-zones. Pobierz tzdata2013g.tar.gz (lub jakiejkolwiek najnowszej wersji tzdataYYYYx.tar.gz jest, gdy czytasz to). Jest to plik w tym archiwum o nazwie zone.tab że daje lat/long dla każdej strefy czasowej, na przykład:

CH  +4723+00832  Europe/Zurich 

+4723+00832 wskazuje szerokość = + 47º23" , długość = + 8º23" .

Aktualizacja: W niektórych przypadkach (nie jestem pewny które), nazwę strefy czasowej może być starsza nazwa stylu jak US/Pacific który nie jest wymieniony w zone.tab. Aby sobie z nimi poradzić, pobierz także plik o nazwie backward, który umożliwia tłumaczenie starszych nazw na bieżące nazwy.

Konwersja zone.tab w coś, co może być używane przez Twoją aplikację, należy do Ciebie. Wyniki nie będą tak dokładne jak usługi lokalizacyjne, ale dadzą ogólny pogląd. Ale nie jest gwarantowane. W kilku sytuacjach zawiedzie:

  1. Użytkownik zmienia swoją strefę czasową w Ustawieniach. Większość użytkowników pozwala telefonowi ustawić godzinę i strefę automatycznie, ale nie wszyscy. Jeśli użytkownik zmieni swoją strefę czasową, otrzyma wszystko, co chce, a nie dokładność.

  2. Urządzenie nie może określić poprawnej lokalnej strefy czasowej. Problemy z siecią mogą uniemożliwić precyzyjne ustawienie czasu i strefy telefonu. Na przykład, jeśli użytkownik podróżuje samolotem i ma problemy z siecią po wylądowaniu, telefon nadal może wyświetlać strefę czasową z miejsca wyjazdu.

+0

jest łatwiejszy sposób na konwersję do kodu kraju niż użycie zone.tab? – Alan

+0

Nie wiem, ale strefa.tab jest już bardzo łatwa w użyciu. –

1

Aktualizacja: Zmieniam swoją odpowiedź po ostatnim komentarzu.

Możesz wyszukać wstecz na IP telefonu, aby dowiedzieć się lokalizacji geograficznej. Istnieje several rest APIs available.

Mówiąc, że nie polecam tego, może to spowodować odrzucenie wniosku przez Apple. Bezpieczny zakład jest przejść przez Apple pod warunkiem location services

+0

to wydaje się dać locale że użytkownik postawił urządzenie.Jeśli grecki persorn podróżuje do USA, to nadal będzie dostarczać grecki – AlexWien

+0

Uzgodniony @AlexWien –

1
NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone]; 
    NSString *strTimeZoneName = [timeZoneLocal name]; 

    or 

    NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone]; 
    NSString *strTimeZoneName = [timeZoneLocal name];