Ответ 1
Вы можете получить имя локального часового пояса, используя:
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *tzName = [timeZone name];
Название будет выглядеть как Australia/Sydney
, или Europe/Zurich
, или America/Denver
. Поскольку это звучит так, будто вам может быть только забота о континенте, это может быть все, что вам нужно.
Если вам нужно больше: получите официальную базу данных часовых поясов на http://www.iana.org/time-zones. Загрузите tzdata2013g.tar.gz
(или что бы ни была последняя версия tzdataYYYYx.tar.gz
, когда вы читаете это). Там файл в этом архиве с именем zone.tab
, который дает lat/long для каждого часового пояса, например:
CH +4723+00832 Europe/Zurich
+4723+00832
обозначает широту = + 47º23 ", долготу = + 8º23".
Обновить. В некоторых случаях (я не уверен, какой) имя часового пояса может быть именем более старого стиля, например US/Pacific
, которое не указано в zone.tab
. Чтобы обработать их, также получите файл с именем backward
, который дает переводы старых имен в текущие имена.
Преобразование zone.tab
в то, что может использовать ваше приложение, зависит от вас. Результаты будут нигде не столь точны, как услуги определения местоположения, но дадут общую идею. Но он не гарантирован. Он не сработает в двух ситуациях:
-
Пользователь меняет свой часовой пояс в настройках. Большинство пользователей позволяют своим телефонам устанавливать время и зону автоматически, но не все. Если пользователь изменяет свой часовой пояс, вы получите то, что захотите, а не то, что точно.
-
Устройство не может определить правильный локальный часовой пояс. Сетевые проблемы могут помешать телефону точно настроить время и зону. Например, если пользователь путешествует на самолете и имеет проблемы с сетью, когда они приземляются, телефон может по-прежнему отображать часовой пояс от места вылета.