EKEventEditViewController проблема с часовым поясом - PullRequest
1 голос
/ 29 августа 2011

У меня странная проблема с EKEventEditViewController при использовании его с пользовательскими часовыми поясами. Он ведет себя по-разному в двух ситуациях:

Ситуация 1 - отлично работает :

  • Запустить приложение
  • Создать EKEventEditViewController для добавления нового события с startDate = [NSDate date]
  • Начало нового события отображается правильно (текущее время)
  • Изменить часовой пояс по умолчанию с помощью [NSTimeZone setDefaultTimeZone: otherTimeZone]
  • Создать EKEventEditViewController для добавления нового события с startDate = [NSDate date]
  • Начало нового события отображается правильно (текущее время настроено на часовой пояс)

Ситуация 2 - неожиданное поведение :

  • Запустить приложение
  • Изменить часовой пояс по умолчанию с помощью [NSTimeZone setDefaultTimeZone: otherTimeZone]
  • Создать EKEventEditViewController для добавления нового события с startDate = [NSDate date]
  • Новое начало события отображается неправильно (системное смещение часового пояса + смещение часового пояса по умолчанию)
  • Изменение часового пояса по умолчанию обратно на системный часовой пояс [NSTimeZone setDefaultTimeZone: [NSTimeZone systemTimeZone]] *
  • Создать EKEventEditViewController для добавления нового события с startDate = [NSDate date]
  • Начало нового события по-прежнему отображается неправильно (системное смещение часового пояса + смещение часового пояса по умолчанию)

Я предполагаю, что при первом отображении EKEventEditViewController он каким-то образом кэширует часовой пояс по умолчанию, а затем использует его в качестве смещения.

Кто-нибудь сталкивался с подобной проблемой? Это ошибка или я что-то упустил?

1 Ответ

0 голосов
/ 05 января 2012

У меня была точно такая же проблема. Я хранил все даты в базе данных в GMT timeZone со смещениями (отдельно). Мое приложение использует пользовательский часовой пояс с самого начала его запуска (GMT). Когда я хотел использовать эти даты при экспорте событий в календарь, я видел неправильные даты начала и окончания. Что помогло мне решить проблему, так это сначала преобразовать даты, которые я сохранил в базе данных, в системный часовой пояс, используя следующий метод преобразования (см. Ниже). Такая преобразованная дата, передаваемая в EKEventEditViewController, тогда правильно отображала даты. Надеюсь, это тоже решит вашу проблему.

+ (NSDate *) convertToSystemTimeZone:(NSDate*)sourceDate {
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];  
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;   
NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease];         
return destinationDate; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...