Используя часовые пояса

Часовые пояса могут создать многочисленные проблемы для приложений. Рассмотрите следующую ситуацию. Вы находитесь в Нью-Йорке, и это - 0:30. У Вас есть приложение, выводящее на экран все игры Главной лиги бейсбола, происходящие завтра. Поскольку завтра отличается в зависимости от часового пояса, ситуации как это должны быть тщательно составлены. К счастью, немного планирования и помощь NSTimeZone простота класса эта задача значительно.

NSTimeZone абстрактный класс, определяющий поведение объектов часового пояса. Объекты часового пояса представляют геополитические области. Следовательно, эти объекты имеют имена области. Объекты часового пояса также представляют временное смещение, или плюс или минус, со Среднего времени по Гринвичу (GMT) и сокращения (такой как PST).

Создание часовых поясов

Часовые пояса влияют на значения компонентов даты, вычисляющихся календарными объектами для данного NSDate объект. Можно создать NSTimeZone объект и использование это для установки часового пояса NSCalendar объект. По умолчанию, NSCalendar когда календарный объект создается, использует часовой пояс по умолчанию для приложения — или процесс —. Если часовой пояс по умолчанию не был иначе установлен, это - набор часового пояса в Установках системы.

В большинстве случаев часовой пояс пользователя по умолчанию должен использоваться при создании объектов даты. Существуют случаи, когда может быть необходимо использовать произвольные часовые пояса. Например, пользователь может хотеть указать, что назначение находится в Среднее время по Гринвичу, потому что это во время ее командировки в Лондон на следующей неделе. NSTimeZone обеспечивает несколько методов класса сделать объекты часового пояса: timeZoneWithName:, timeZoneWithAbbreviation:, и timeZoneForSecondsFromGMT:. В большинстве случаев timeZoneWithName: обеспечивает самый точный часовой пояс, поскольку он приводит в соответствие в течение летнего времени, компромисс - то, что необходимо знать более точно расположение, для которого Вы создаете часовой пояс.

Поскольку полный список часового пояса называет известным системе, можно использовать knownTimeZoneNames метод класса:

NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

Часовой пояс значения по умолчанию приложения

Можно установить часовой пояс по умолчанию в использовании приложения setDefaultTimeZone:. Можно получить доступ к этому часовому поясу по умолчанию в любое время с defaultTimeZone метод класса. С localTimeZone метод класса можно получить объект часового пояса, автоматически обновляющий себя для отражения изменений в часовом поясе по умолчанию.

Создание дат с часовыми поясами

Когда даты имеют место, часовые пояса играют важную роль в определении. Рассмотрите простое календарное заявление, отслеживающее назначения. Например, скажите, что Вы живете в Чикаго, и у Вас есть назначение дантиста, подходящее в 10:00 во вторник. Вы будете в Нью-Йорке в течение воскресенья и в понедельник, как бы то ни было. При создании того назначения, оно было сделано с мышлением абсолютного времени. То время является центральным поясным временем 10:00; когда Вы переходите к Нью-Йорку, время должно быть представлено как 11:00, потому что Вы находитесь в различном часовом поясе, но это - то же абсолютное время. С другой стороны, при создании назначения, чтобы проснуться и тренироваться каждое утро в 7:00, Вы не хотите, чтобы Ваше предупреждение ушло в 13:00 просто, потому что Вы находитесь в командировке в Дублин — или в 5:00 потому что Вы находитесь в Лос-Анджелесе.

NSDate в абсолютное время объекты хранят даты. Например, date объект, создаваемый в Перечислении 16, представляет 16:00 CDT, 5:00 EDT, и т.д.

Перечисление 16  , Создающее дату из компонентов с помощью определенного часового пояса

NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CDT"]];
NSDateComponents *timeZoneComps=[[NSDateComponents alloc] init];
[timeZoneComps setHour:16];
//specify whatever day, month, and year is appropriate
NSDate *date=[gregorian dateFromComponents:timeZoneComps];

Если необходимо создать дату, которая независима от часового пояса, можно сохранить дату как NSDateComponents объект — пока Вы храните некоторую ссылку на соответствующий календарь.

В iOS, NSDateComponents объекты могут содержать календарь, часовой пояс и объект даты. Можно поэтому сохранить календарь вместе с компонентами. Если Вы используете date метод NSDateComponents класс для доступа к дате удостоверьтесь, что связанный часовой пояс актуален.

Часовые пояса и летнее время

NSTimeZone класс также обеспечивает много методов экземпляра определить информацию в летнее время:

Там также так же названы методами для определения этой информации для определенных дат. Если Вы отслеживаете события и назначения в Вашем приложении, можно использовать эту информацию для напоминания пользователю о предстоящих переходах летнего времени.