0

저는 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 설정 시도했지만 아무도 작동하는 것.

아이디어가 있으십니까?

감사합니다.

+1

당신은 '[calendar components ...]'하기 전에 시간대 *로 원숭이가 필요합니다. –

답변

0

코드가 일 간의 분수 차이를 처리하지 않는 것처럼 보입니다. 예를 들어, 시작 날짜가 어제 오후 11시 59 분이고 종료 날짜가 오늘 오전 12:01 일 경우 코드는 차이를 0 일로보고합니다. 이를 1 일 차이라고 생각하면 코드가이 경우를 처리해야합니다.

날짜 선택 도구를 사용하여 self.date를 선택하는 경우 self.date에는 날짜와 현재 현지 시간이 더해진 날짜가 포함됩니다. 현지 시간으로 오후 6시 또는 7시에 자정 GMT (즉, 내일 현지 시간으로 WRT)가되어 예상치 못한 차이가 발생합니다.