Часовой пояс EKEventStore не GMT

Я пытаюсь получить все события за один день из экземпляра EKEventStore, используя eventsMatchingPredicate:, но, как я читал, для объектов NSDate по умолчанию установлено значение GMT, а для EKEventStore — нет. Итак, мой вопрос: как изменить часовой пояс EKEventStore или настроить объекты NSDate, чтобы время не сбивалось для каждого часового пояса?

Например, я нахожусь в GMT -0600 и щелкаю 16 и 17 января в TKCalendarMonthView, который я использую для пользовательского интерфейса календаря, и показывает День Мартина Лютера Кинга в обе даты. Время начала — 6:00 16 января, а время окончания — 5:59 17 января (из-за моего часового пояса), а не начало в 00:00 и продолжительность до 23:59. Далее следует код, используемый для извлечения событий.

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d {
  // Update tableData with event data from date
  [tableData removeAllObjects];
  NSArray *a = [systemCalendar eventsMatchingPredicate:[systemCalendar predicateForEventsWithStartDate:d endDate:[NSDate dateWithTimeInterval:84600 sinceDate:d] calendars:nil]];
  [tableData addObjectsFromArray:a];
  [self.eventsTable reloadData];
}

person Jacob    schedule 12.01.2012    source источник


Ответы (1)


Учитывая, что у меня короткие сроки, я нашел решение, и, похоже, оно работает. Меня беспокоит только то, что мне пришлось умножить смещение на -1, хотя само смещение временного интервала отрицательно. Это не имеет смысла, потому что мы пытаемся вычесть из NSDate, а не добавить к нему. Положительное число минус отрицательное число дает нам большее число, поэтому я немного беспокоюсь о зонах по Гринвичу на другой стороне PM и задаюсь вопросом, должен ли я на самом деле умножать все временные интервалы на -1. У кого-нибудь есть мысли?

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d {
  [NSTimeZone resetSystemTimeZone];
  NSTimeZone *tz = [NSTimeZone systemTimeZone];
  NSArray *comps = [[tz description] componentsSeparatedByString:@" "];
  NSTimeInterval offset = (NSTimeInterval)[[comps lastObject] floatValue];
  if (offset < 0) {
    offset *= -1;
  }
  NSDate *startDate = [d dateByAddingTimeInterval:offset];

  NSArray *a = [systemCalendar eventsMatchingPredicate:[systemCalendar predicateForEventsWithStartDate:startDate endDate:[NSDate dateWithTimeInterval:84600 sinceDate:startDate] calendars:nil]];
  NSLog(@"Events for the date: %@", a);
  [tableData addObjectsFromArray:a];
  [self.eventsTable reloadData];
}
person Jacob    schedule 16.01.2012