2010-03-25 2 views
1

날짜에 값을 추가하거나 날짜간에 차이가 발생하는 데 문제가 있습니다. 계산 된 날짜와 구성 요소가 올바르지 않습니다.dateByAddingComponents 및 NSDateComponents와 날짜의 차이 가져 오기

추가 할 때 1.5 개월을 더하면 1 개월 밖에 걸리지 않습니다. 그러나 모든 정수 ie (1 또는 2 또는 3 등)를 추가하면 올바르게 계산됩니다. 내가 정확히 일년 (위와 거의 동일한 코드)로 추가 된 날짜가있는 경우 차이가 지금

Float32 addAmount = 1.5; 

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; 
[components setMonth:addAmount]; 

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 

NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0]; 

은 올바르게 추가되지만 차이가 계산 될 때, I 0 년 11 개월 얻을 그리고 30 일.

NSDate *startDate = Date1; 
NSDate *endDate = Date2; 

NSCalendar *gregorian = [[NSCalendar alloc] 
      initWithCalendarIdentifier:NSGregorianCalendar]; 
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 

NSDateComponents *components = [gregorian components:unitFlags 
       fromDate:startDate 
       toDate:endDate options:0]; 

NSInteger years = [components year]; 
NSInteger months = [components month]; 
NSInteger days = [components day]; 

내가 뭘 잘못하고 있니? 또한 kCFCalendarComponentsWrap constanct 추가 및 차이 기능을 모두 있지만 차이가있는 옵션을 추가했습니다.

감사

I 1.5 개월을 추가하면, 난 단지 내가 어떤 정수 즉, 추가 그러나 경우 1 개월 얻을 , 추가 그래서

답변

1

(1 또는 2 또는 3 등) 는 제대로 계산 . NSDateComponents

setMonth: 방법은 NSInteger 아닌 부동 소수점 숫자 걸린다. 단순히 차이를 이제 1.5 대 1

를 잘라내는 것 같이 내가 (위와 거의 동일한 코드) 정확히 한 년에 추가 된 날짜 있는 경우에 따라서 동작은,,, 정확 정확하게 추가하지만 차이가 계산되면 0 년, 11 개월 및 30 일이됩니다.

Date1 및 Date2 변수가 생성되는 방법에 대한 코드를 표시하지 않으면 실제로 알 수있는 방법이 없습니다.

,

는 (이후에만 클래스 이름을 수행해야 스타일의 문제로 항상 release/ autorelease과 ALLOC 일치 그리고 당신의 변수를 대문자를 포기하지 않으려 고 당신은 또한 위의 메모리가 누수 있습니다.)
+0

나는 메모리 누수를 발견하지 못했습니다. 감사합니다. 날짜 변수는 대개 date1 = self.dob.date와 같은 코드가있는 uidatepicker에서 작성됩니다. 여기서 dob는 datepicker 이름입니다. 변수 이름에 관해서는 당신이 절대적으로 옳았습니다. 케이스를 생각하지 않고 게시하도록 변경했습니다. – Rob

0

마지막으로 날짜 차이가있는 문제를 발견했습니다. 데이터베이스에 저장할 때 timeintervalsince1970을 double 값으로 사용했지만 날짜를 채우고 datepicker로 설정할 때 int 열 유형을 사용했습니다.

올바른 방향으로 나를 조종 해준 덕분에 털복숭이 개구리.