1

順序付けられた NSDates の NSMutableArray があります。配列内の最も古い日付から現在までの元の配列にないすべての日 (NSDate 形式) を返すメソッドを探しています。等しいかどうかをチェックするときは、NSDate の年、月、日の部分だけを気にします。例えば:

NSMutableArray *missingDates;
for (NSDate *date in allDatesBetweenOldestDateAndNow){
    if (date isNotIn: myDates)
        [missingDates addObject:date];
return missingDates;

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

1

使用することをお勧めしますNSDateComponents。Appleにはそれらを使用するためのガイドがあります。

AppleによるこのガイドNSDateComponentsでは、計算日を実行して自分と同様のタスクを実行する方法について説明しています。

于 2013-01-10T19:49:31.483 に答える
1

NSDate時間を考慮せずに日付を比較するメソッド をサブクラス化して追加する必要がある場合があります。

- (BOOL) isEqual:(id)object
{
    NSDateComponents* c1= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: self ];
    NSDateComponents* c2= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: object ];
    return [c1 isEqual: c2];
}

残りは自然なことです。配列に日付があるかどうかを確認するには、このメソッドを使用できます。

于 2013-01-10T19:56:51.730 に答える
1

コンパイルされていません -- おそらくいくつかのトゥポがあります。

NSDateFormatter* dayFmt = [[NSDateFormatter alloc] init];
[dayFmt setTimeZone:<whatever time zone you want>];
[dayFmt setDateFormat:@"g"];
NSInteger lastDay = [[dayFmt stringFromDate:startDate] integerValue];
// Note:  We assume that myDates is sorted, as stated.
for (NSDate* myDate in myDates) {
    NSInteger myDay = [[dayFmt stringFromDate:myDate] integerValue];
    while (myDay > lastDay+1) {
        lastDay++;
        NSDate* newDate = [dayFmt dateFromString:[NSString stringWithFormat:@"%d", lastDay]];
        [missingDates addObject:newDate];
    }
}

(最後の配列エントリと任意の終了日の間に欠落している日付を埋める方法をユーザーが理解するための演習として残します。)

(コードは、配列に重複する日付がないことを前提としていることにも注意してください。簡単に処理できますが、ユーザーにとっては別の課題です。)

于 2013-01-10T20:41:32.227 に答える