저는 NSCalendar와 NSDateComponents를 사용하여 2 개의 날짜 사이의 차이 (일)를 반환했습니다. 여기에 내가 사용하기 위해 사용하는 코드가 있습니다.iOS - 2 개의 NSDate 사이의 차이가있는 TimeZone 문제
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *todayDate = [NSDate date];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:todayDate];
[comps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *today = [calendar dateFromComponents:comps];
NSDate *startDate = self.date;
NSDate *endDate = today;
NSLog(@"startDate: %@",startDate);
NSLog(@"endDate: %@",endDate);
NSDateComponents *components = [calendar components:NSDayCalendarUnit
fromDate:endDate
toDate:startDate
options:0];
[components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSInteger days = [components day];
이상한 부분은이 날의 초기 부분에서 완벽하게 작동한다는 것입니다,하지만 난 약 6 또는 오후 7 도달하면, 다 (나는 GMT -7 내가 생각입니다 산지 표준시를 사용하고 있습니다) 올바르게 작동합니다. 올바른 차이를 반환하는 대신 차이에서 1 일을 뺀 값을 반환합니다. 그래서 예를 들어, 0 대신 -1 또는 2 대신 1을 반환합니다.
나는 이것이 시간대 문제라고 생각합니다. 누구든지 그것을 고칠 방법을 알고 있습니까? 내 NSCalendar 및 NSDateComponents GMT, 로컬 및 시스템에 대한 timeZone 설정 시도했지만 아무도 작동하는 것.
아이디어가 있으십니까?
감사합니다.
당신은 '[calendar components ...]'하기 전에 시간대 *로 원숭이가 필요합니다. –