NSTimeZone: в чем разница между localTimeZone и systemTimeZone? - PullRequest
39 голосов
/ 06 октября 2009

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

Мой тест:

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

Ответы [ 2 ]

52 голосов
/ 06 октября 2009

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

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

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

23 голосов
/ 06 октября 2009

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

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