Подтвердить что ты не робот

NSTimeZone: в чем разница между localTimeZone и systemTimeZone?

В классе NSTimeZone есть как + localTimeZone, так и systemTimeZone. Я сделал тест на симуляторе iphone, оба возвращают объект NSTimeZone, указывающий тот же часовой пояс. В чем разница? Какой из них я должен использовать, чтобы узнать настройки часового пояса iPhone? Благодаря

Мой тест:

NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
NSLog(@"System Time Zone %@",[[NSTimeZone systemTimeZone] name]);
4b9b3361

Ответ 1

Пользователь (или ваше приложение или другое приложение) может изменить любой часовой пояс по умолчанию для приложения (используя +[NSTimeZone setDefaultTimeZone]) или системный часовой пояс (используя Системные настройки) в любое время. +[NSTimeZone localTimeZone] возвращает прокси-сервер, который всегда будет действовать так, как если бы он был текущим часовым поясом по умолчанию для приложения, даже если это значение по умолчанию изменяется. Вы можете изменить часовой пояс по умолчанию для приложения, чтобы заставить его вести себя так, как если бы он находился в другом часовом поясе.

+[NSTimeZone systemTimeZone] возвращает текущий часовой пояс системы (в соответствии с настройками системы). В большинстве случаев они будут одинаковыми (по умолчанию, по умолчанию используется часовой пояс приложения по умолчанию при запуске приложения).

Если вы хотите узнать настройку часового пояса системы, вы, вероятно, захотите использовать +[NSTimeZone systemTimeZone]. Если вы хотите, чтобы правильный часовой пояс для вашего приложения работал, вы, вероятно, захотите +[NSTimeZone localTimeZone].

Ответ 2

Документы - это много полезной информации для такого рода вещей. В этом случае они говорят:

  • localTimeZone - это часовой пояс по умолчанию для текущего приложения. Это может быть задано пользователем или программно в приложении (или, возможно, другими способами). Это в основном указатель на defaultTimeZone с уровнем косвенности; если изменяется часовой пояс по умолчанию, localTimeZone также изменится.
  • systemTimeZone, с другой стороны, является часовым поясом, используемым базовой системой. Значение кэширования для этого не изменится, если во время выполнения приложения изменяется часовой пояс системы, в отличие от localTimeZone.