EKEventStore часовой пояс не GMT - PullRequest
       26

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

1 голос
/ 12 января 2012

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

Например, я нахожусь в GMT -0600 и щелкаю 16 и 17 января в TKCalendarMonthView, который я использую для пользовательского интерфейса календаря, и показывает День Мартина Лютера Кинга в обе даты. Время начала - 6 утра 16 января, а время окончания - 5:59 утра 17 января (в результате моего часового пояса), а не начало в 12: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];
}

1 Ответ

2 голосов
/ 16 января 2012

Учитывая, что я на коротком графике, я нашел решение, и оно, похоже, работает.Меня беспокоит только то, что мне пришлось умножить смещение на -1, хотя само смещение временного интервала отрицательно.Это не имеет смысла, потому что мы пытаемся вычесть из NSDate, а не добавить к нему.Положительное число минус отрицательное число дает нам большее число, поэтому я немного беспокоюсь о зонах GMT по другую сторону от ПМ и задаюсь вопросом, нужно ли мне на самом деле умножать все временные интервалы на -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];
}
...