1

日付に値を追加したり、日付間の差を取得したりすることに問題があります。計算された日付とコンポーネントが正しくありません。

したがって、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 定数を追加しましたが、違いはありません。

ありがとう

4

2 に答える 2

0

最終的に日付の違いの問題を発見しました.dbに保存するときは、timeintervalsince1970をdouble値で使用しましたが、データを入力してdatepickerに設定するときは、int列タイプを使用していました。

私を正しい方向に導いてくれた Shaggy Frog に感謝します。

于 2010-03-25T04:08:05.310 に答える