Работа с часовыми поясами (NSTimeZone)

Cocoa

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

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

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

Часовые пояса влияют на значения компонентов даты, которые рассчитываются по календарным объектам для данного объекта NSDate. Вы можете создать объект NSTimeZone и использовать его, чтобы установить часовой пояс объекта NSCalendar. По умолчанию NSCalendar использует часовой пояс по умолчанию для приложения или процесса, на момент создания календаря.

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

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

NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

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

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

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

NSDate объекты хранят даты в абсолютном времени. Например, объект даты, созданный в листинге 16 представляет 4: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];
//указать, что подходит любой день, месяц и год
NSDate *date=[gregorian dateFromComponents:timeZoneComps];

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

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

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

Класс NSTimeZone также предоставляет ряд методов экземпляра для получения информации о переходе на летнее время:

  • isDaylightSavingTime определяет, будет ли летнее время действовать в настоящее время.
  • daylightSavingTimeOffset определяет текущее смещение летнего времени. Для большинства часовых поясов, это ноль или один.
  • nextDaylightSavingTimeTransition определяет, когда происходит следующий переход на летнее время.

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

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac