Используя часовые пояса
Часовые пояса могут создать многочисленные проблемы для приложений. Рассмотрите следующую ситуацию. Вы находитесь в Нью-Йорке, и это - 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
класс также обеспечивает много методов экземпляра определить информацию в летнее время:
isDaylightSavingTime
определяет, является ли летнее время в настоящее время в действительности.daylightSavingTimeOffset
определяет текущее смещение летнего времени. Для большинства часовых поясов это - или нуль или один.nextDaylightSavingTimeTransition
определяет, когда в следующий раз переходят, происходит.
Там также так же названы методами для определения этой информации для определенных дат. Если Вы отслеживаете события и назначения в Вашем приложении, можно использовать эту информацию для напоминания пользователю о предстоящих переходах летнего времени.