日付に値を追加したり、日付間の差を取得したりすることに問題があります。計算された日付とコンポーネントが正しくありません。
したがって、1.5 か月を追加すると 1 か月しか取得できませんが、整数 (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];
違いとして、正確に1年(上記とほぼ同じコード)で追加された日付がある場合、正しく追加されますが、差を計算すると、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 定数を追加しましたが、違いはありません。
ありがとう