2012-01-12 2 views
1

eventsMatchingPredicate :를 사용하여 EKEventStore의 인스턴스에서 하루 동안 모든 이벤트를 검색하려고합니다. 그러나 읽었을 때 NSDate 객체는 기본적으로 GMT로 설정되고 EKEventStore는 그렇지 않습니다. '티. 그래서 내 질문은 EKEventStore의 표준 시간대를 변경하거나 NSDate 개체를 조정하여 시간대가 각 표준 시간대에 맞춰지지 않도록하는 방법입니다.EKEventStore 표준 시간대가 GMT가 아닙니다

예를 들어 저는 GMT -0600입니다. 캘린더 UI에 사용하는 TKCalendarMonthView에서 1 월 16 일과 17 일을 클릭하면 Martin Luther King Day가 두 날짜에 모두 표시됩니다. 시작 시간은 1 월 16 일 오전 6시이며, 종료 시간은 오전 12시에 시작하여 오후 11시 59 분까지 지속되는 대신 1 월 17 일 오전 5: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]; 
} 

답변

2

나는 짧은 일정을 감안할 때, 해결책을 생각해 냈습니다. 내 유일한 관심사는 시간 간격 자체가 음수 일지라도 -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]; 
}