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:
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ść.
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.
jest łatwiejszy sposób na konwersję do kodu kraju niż użycie zone.tab? – Alan
Nie wiem, ale strefa.tab jest już bardzo łatwa w użyciu. –